给定两个由小写字母构成的字符串 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 提交记录