1. 题目
![在这里插入图片描述](https://img-blog.csdnimg.cn/4c69d46f321e43eba572d006ef77b7a6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Zi_6LSi57un57ut5Yqq5Yqb,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
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;
}
}