1. 程式人生 > >【JS】親密字串 #字串

【JS】親密字串 #字串

給定兩個由小寫字母構成的字串 A 和 B ,只要我們可以通過交換 A 中的兩個字母得到與 B 相等的結果,就返回 true ;否則返回 false 。

輸入: A = “ab”, B = “ba” , 輸出: true
輸入: A = “ab”, B = “ab” , 輸出: false
輸入: A = “aa”, B = “aa” , 輸出: true
輸入: A = “aaaaaaabc”, B = “aaaaaaacb” , 輸出: true
輸入: A = “”, B = “aa” , 輸出: false

提示:

0 <= A.length <= 20000
0 <= B.length <= 20000
A 和 B 僅由小寫字母構成。



解法一:

字串 A 的兩個不同的字元交換位置,再返回字串 A , B 是否相同。

可能要考慮2個字串完全相同的情況,比如 :

A=‘ab’ ,B=‘ab’ ; 互換不會相同,A=‘aab’ ,B=‘aab’ 互換字元 'aa’就是相同的

var buddyStrings = function(A, B) {

    if(A.length<1 || B.length<1) return false;
    var str='' ,p ,A=A.split("") ,arr={},same=0
    for(var i=0;i<A.length;i++){

        if(arr[A[i]]){
            same=1
        }else{
            arr[A[i]]=1
        }
        if(A[i]!=B[i]){
            if(str!=''){
                A[p]=A[i]
                A[i]=str;
                break;
            }
            str=A[i]
            p=i
        }
    }
    // console.log(A.join(""),B,p,arr)
    return A.join("")==B && ( same==1 || p>=0 ) ? true: false;

}

執行用時:76 ms
已經戰勝 84.77 % 的 javascript 提交記錄