给你两个字符串 s 和 goal ,只要我们可以通过交换 s 中的两个字母得到与 goal 相等的结果,就返回 true ;否则返回 false 。
交换字母的定义是:取两个下标 i 和 j (下标从 0 开始)且满足 i != j ,接着交换 s[i] 和 s[j] 处的字符。
- 例如,在
"abcd"中交换下标0和下标2的元素可以生成"cbad"。
示例 1:
输入:s = "ab", goal = "ba" 输出:true 解释:你可以交换 s[0] = 'a' 和 s[1] = 'b' 生成 "ba",此时 s 和 goal 相等。
示例 2:
输入:s = "ab", goal = "ab" 输出:false 解释:你只能交换 s[0] = 'a' 和 s[1] = 'b' 生成 "ba",此时 s 和 goal 不相等。
示例 3:
输入:s = "aa", goal = "aa" 输出:true 解释:你可以交换 s[0] = 'a' 和 s[1] = 'a' 生成 "aa",此时 s 和 goal 相等。
提示:
1 <= s.length, goal.length <= 2 * 104s和goal由小写英文字母组成
Related Topics
遍历比较,简单
遍历比较
- 长度不同 ->
false - 遍历字符串, 如果不同的的
char超过两个 ->false - 如果只有一个字符不同 ->
false - 如果没有字符不同,看原字符串中有无重复的字符,则相同字符互相交换下可以和原来一样 ->
true - 剩下有两个字符不同的情况,判断下
s字符串中第一个不同字符和goal第二个不同位置的是否一样,且s字符串中第二个不同字符和goal第二个不同位置的是否一样 如果符合 ->true - 否则 ->
false
class Solution {
public boolean buddyStrings(String s, String goal) {
if (s.length() != goal.length()){
return false;
}
int[] diff = new int[]{-1,-1};
int idx = -1;
int diffCount = -1;
int[] charCount = new int[25];
while (++idx < s.length()){
charCount[s.charAt(idx)-'a']++;
if (s.charAt(idx) == goal.charAt(idx)){
continue;
}
if (diffCount == 1){
return false;
}
diff[++diffCount] = idx;
}
if (diffCount == 0){
return false;
}
if (diffCount == -1){
for (int i : charCount) {
if (i > 1){
return true;
}
}
return false;
}
return s.charAt(diff[0]) == goal.charAt(diff[1]) && s.charAt(diff[1]) == goal.charAt(diff[0]);
}
}
发表评论