题目描述:
给定两个由小写字母构成的字符串 A
和 B
,只要我们可以通过交换 A
中的两个字母得到与 B
相等的结果,就返回 true
;否则返回 false
。
示例 1:
输入: A = "ab", B = "ba"
输出: true
示例 2:
输入: A = "ab", B = "ab"
输出: false
示例 3:
输入: A = "aa", B = "aa"
输出: true
示例 4:
输入: A = "aaaaaaabc", B = "aaaaaaacb"
输出: true
示例 5:
输入: A = "", B = "aa"
输出: false
提示:
0 <= A.length <= 20000
0 <= B.length <= 20000
A
和B
仅由小写字母构成。
代码:
class Solution {
public boolean buddyStrings(String A, String B) {
StringBuilder a=new StringBuilder();
StringBuilder b=new StringBuilder();
Set<Character> set=new HashSet<>();
if(A.length()!=B.length()||A.length()<2||B.length()<2)
return false;
if(A.equals(B)){//若A与B相等且字符串内部有重复的字母,则返回true.
for(int i=0;i<A.length();i++){
if(set.contains(A.charAt(i)))
return true;
else
set.add(A.charAt(i));
}
return false;
}else{//A与B不相等,只能有两个字符不相等,用a,b String类保存两个不相等的字符
for(int i=0;i<A.length();i++){
if(A.charAt(i)!=B.charAt(i)){
a.append(A.charAt(i));
b.append(B.charAt(i));
}
if(a.length()>2)//不相等的字符超过两个
return false;
}
if(a.length()==2&&a.charAt(0)==b.charAt(1)&&a.charAt(1)==b.charAt(0))
return true;
else
return false;
}
}
}