- 859.亲密字符串
- 题目描述
- 思路
- 模拟
- Python实现
- Java实现
859.亲密字符串 题目描述
亲密字符串
思路 模拟
依据题意进行模拟即可。要注意的是必须交换一次,而交换后,有两种情况:
- 本身字符串是一致的,有相同的字母,交换相同的字母仍然一致;
- 本身字符串刚好有两个字母顺序对调,交换后正好一致。
class Solution:
def buddyStrings(self, s: str, goal: str) -> bool:
if len(s) != len(goal):
return False
x, y, cnts = -1, -1, [0] * 26
for i in range(len(s)):
cnts[ord(s[i]) - ord('a')] += 1
if s[i] != goal[i]:
if x == -1:
x = i
elif y == -1:
y = i
else:
return False
return (x != -1 and y != -1 and s[x] == goal[y] and s[y] == goal[x]) or (x == -1 and y == -1 and any(c > 1 for c in cnts))
Java实现
class Solution {
public boolean buddyStrings(String s, String goal) {
if (s.length() != goal.length()) return false;
int x = -1, y = -1;
int[] cnts = new int[26];
for (int i = 0; i < s.length(); i++) {
cnts[s.charAt(i) - 'a']++;
if (s.charAt(i) != goal.charAt(i)) {
if (x == -1) x = i;
else if (y == -1) y = i;
else return false;
}
}
if (x == -1 && y == -1) {
for (int i = 0; i < 26; i ++) {
if (cnts[i] > 1) return true;
}
}
if (x != -1 && y != -1) {
if (s.charAt(x) == goal.charAt(y) && s.charAt(y) == goal.charAt(x))
return true;
}
return false;
}
}



