Given two strings A
and B
of lowercase letters, return true
if and only if we can swap two letters in A
so that the result equals B
.
Example 1:
Input: A = "ab", B = "ba" Output: true
Example 2:
Input: A = "ab", B = "ab" Output: false
Example 3:
Input: A = "aa", B = "aa" Output: true
Example 4:
Input: A = "aaaaaaabc", B = "aaaaaaacb" Output: true
Example 5:
Input: A = "", B = "aa" Output: false
Note:
0 <= A.length <= 20000
0 <= B.length <= 20000
A
andB
consist only of lowercase letters.
题目理解:
给定两个字符串A和B,如果将A中的两个字符交换位置可以变成B,则返回真,否则返回假。
解题思路:
遍历两个字符串:
1、如果字符出现的种类或者数量不同,返回假
2、如果两个字符串不相同位置数量不是2或者0,返回假
3、如果两个字符串不相同的位置数是0,且没有一个字符出现至少2次,返回假
4、其他情况返回真
class Solution {
public boolean buddyStrings(String A, String B) {
if(A.length() != B.length())
return false;
char[] a = A.toCharArray(), b = B.toCharArray();
int len = a.length, count = 0;
int[] char_a = new int[26], char_b = new int[26];
for(int i = 0; i < len; i++){
if(a[i] != b[i])
count++;
char_a[a[i] - 'a']++;
char_b[b[i] - 'a']++;
}
for(int i = 0; i < 26; i++)
if(char_a[i] - char_b[i] != 0)
return false;
if(count == 2)
return true;
if(count == 0){
for(int num : char_a)
if(num > 1)
return true;
}
return false;
}
}