1. 题目
2. 思路
(1) 模拟法
- 两个字符串满足亲密字符串只有两种情况:
- 两个字符串相等且存在重复元素;
- 两个字符串不等但有且仅有两个元素不相等,且两个元素交换位置后两个字符串相等。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public boolean buddyStrings(String s, String goal) {
if (s.length() != goal.length()) {
return false;
}
if (s.equals(goal)) {
int[] count = new int[26];
for (int i = 0; i < s.length(); i++) {
int chIndex = s.charAt(i) - 'a';
if (count[chIndex] > 0) {
return true;
}
count[chIndex]++;
}
} else {
int[] differ = new int[2];
int index = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != goal.charAt(i)) {
if (index == 2) {
return false;
}
differ[index] = i;
index++;
}
}
return index == 2 && s.charAt(differ[0]) == goal.charAt(differ[1]) && s.charAt(differ[1]) == goal.charAt(differ[0]);
}
return false;
}
}