力扣(LeetCode)亲密字符串 个人题解
给定两个由小写字母构成的字符串 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
仅由小写字母构成。
由题意可知,字符串有且只有在A和B的长度一样,并且错位的字符有且只有两个的时候,才是亲密字符串。
这里注意一个特殊情况,当一个字符串和另外一个字符串相等并且出现两个及以上的相同字符时,也需要认定为亲密字符串。这里第一次做题时没有清晰得认识到导致错误。
代码如下:
class Solution { public boolean buddyStrings(String A, String B) { boolean ans = false; if (A.length() != B.length()) return false; else if(A.equals(B)) { int[] count=new int[26]; for(int i=0;i<A.length();i++) { count[A.charAt(i)-'a']++; if(count[A.charAt(i)-'a']>1) return true; } } else { int difcount = 0; char diffchara = 0, diffcharb = 0; for (int i = 0; i < A.length(); i++) { if (A.charAt(i) != B.charAt(i)) { if (difcount == 0) { difcount++; diffchara = A.charAt(i); diffcharb = B.charAt(i); } else if (difcount == 1) { difcount++; if (diffchara == B.charAt(i) && diffcharb == A.charAt(i)) ans = true; else return false; } else { return false; } } } } return ans; } }