1. 程式人生 > 其它 >#力扣 LeetCode859. 親密字串 @FDDLC

#力扣 LeetCode859. 親密字串 @FDDLC

技術標籤:演算法&資料結構

題目描述:

https://leetcode-cn.com/problems/buddy-strings/

Java程式碼:

class Solution { //len=0,1,2,3
    public boolean buddyStrings(String a, String b) { //小寫字母構成
        if(a.length()!=b.length())return false;
        if(Objects.equals(a,b)){
            if(a.length()>26)return true;
            int[] cnt=new int['z'+1];
            for(int i=a.length()-1;i>=0;i--)if(++cnt[a.charAt(i)]==2)return true;
            return false;
        }
        int x=0,y=0,cnt=0;
        for(int i=a.length()-1;i>=0;i--){
            if(a.charAt(i)!=b.charAt(i)){
                if(++cnt==3)return false;
                if(cnt==1)x=i;
                if(cnt==2)y=i;
            }
        }
        if(cnt<2)return false;
        return a.charAt(x)==b.charAt(y)&&a.charAt(y)==b.charAt(x);
    }
}

Java程式碼二:

class Solution { //len=0,1,2,3
    public boolean buddyStrings(String a, String b) { //小寫字母構成
        if(a.length()!=b.length())return false; //長度不相等
        if(Objects.equals(a,b)){ //a、b相等的情況
            if(a.length()>26)return true;
            int[] cnt=new int['z'+1];
            for(int i=a.length()-1;i>=0;i--)if(++cnt[a.charAt(i)]==2)return true;
            return false;
        }
        int[] t=new int[3];
        for(int i=a.length()-1;i>=0;i--){ //a、b不相等的情況
            if(a.charAt(i)!=b.charAt(i)){
                if(++t[0]==3)return false; //t[0]用於計數
                t[t[0]]=i;
            }
        }
        return t[0]==2&&a.charAt(t[1])==b.charAt(t[2])&&a.charAt(t[2])==b.charAt(t[1]);
    }
}