通过万岁!!!
- 题目:给你两个字符串,然后看一下能不能让里面的两个字符交换以后,使得两个字符串相等。但是也可以不进行交换。
- 思路:其实我们对字符串遍历就可以了,如果有三个及以上不一样的字符,就直接返回false,如果有两个分别是i和j,我们看一下s1的i和s2的j是不是相同,同时s1的j和s2的i是不是相同。如果只有一个不同,则返回false。然后就是一些其他的特殊情况的判断了,例如长度压根不相同,字符串原本就相同等情况。
- 技巧:字符串的遍历
java代码
class Solution {
public boolean areAlmostEqual(String s1, String s2) {
int len = s1.length();
if (len != s2.length()) {
return false;
}
if (s1.equals(s2)) {
return true;
}
int[] temp = new int[]{-1, -1};
for (int i = 0; i < len; i++) {
if (s1.charAt(i) != s2.charAt(i)) {
if (temp[0] == -1) {
temp[0] = i;
} else if (temp[1] == -1) {
temp[1] = i;
} else {
return false;
}
}
}
// 只有一个不同
if (temp[1] == -1) {
return false;
}
if (s1.charAt(temp[0]) == s2.charAt(temp[1])
&& s1.charAt(temp[1]) == s2.charAt(temp[0])) {
return true;
} else {
return false;
}
}
}
- 总结:题目确实不难,这里使用了一个二维数组来表示思路中的i和j。