题目:
给定两个由小写字母构成的字符串
A
和B
,只要我们可以通过交换A
中的两个字母得到与B
相等的结果,就返回true
;否则返回false
。示例 1:
输入: A = "ab", B = "ba" 输出: true示例 2:
输入: A = "ab", B = "ab" 输出: false示例 3:
输入: A = "aa", B = "aa" 输出: true
解题思路:
考虑到下面几种情况:
1.两个数组长度不一致,返回false;
2.两个数组长度一致且==的情况下,若相等,则去重,去重长度不变的,说明交换顺序也不能让两个数组相同,所以返回false
3.若去重后长度变化的,返回true.
4.遍历数组,利用数组记录两数组不同的地方,若记录数组长度超过2,则返回false;
5.长度为2的情况下,判断前后的数据是否一样就可以了。
代码:
/**
* @param {string} A
* @param {string} B
* @return {boolean}
*/
var buddyStrings = function(A, B) {
var a1=new Set(A);
var b1=new Set(B);
var a2=Array.from(a1);
var b2=Array.from(b1);
if(A==B&&a2.length==A.length){
return false;
}
if(A==B&&a2.length!=A.length){
return true;
}
if(A.length!=B.length) return false;
var b=[];
for(var i=0;i<A.length;i++){
if(A[i]!=B[i]) b.push(i)
}
if(b.length!=2){
return false;
}
if(A[b[0]]==B[b[1]]&&A[b[1]]==B[b[0]]) return true;
else return false;
};