亲密字符串

题解方法

  • 模拟

模拟

  • 当 s 与 goal 长度或词频不同,必然不为亲密字符
  • 当 s 与 goal 不同的字符数量为 2 或 s 与 goal 不同的字符数量为 0,且 s 中有出现数量超过 2 的字符时,必然为亲密字符

核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public boolean buddyStrings(String s, String goal) {
int m = s.length(), n = goal.length();
if (m != n) {
return false;
}

int[] cnt1 = new int[26], cnt2 = new int[26];
int sum = 0;

for (int i = 0; i < n; i++) {
int a = s.charAt(i) - 'a', b = goal.charAt(i) - 'a';
cnt1[a]++; cnt2[b]++;
// 不同字符数量统计
if (a != b) {
sum++;
}
}
boolean flag = false;
for (int i = 0; i < 26; i++) {
// 词频不同必然不为亲密字符
if (cnt1[i] != cnt2[i]) {
return false;
}
// 词频相同,且同时出现数量超过2的字符,必然为亲密字符
if (cnt1[i] > 1) {
flag = true;
}
}
return sum == 2 || (sum == 0 && flag);
}

题目来源

859. 亲密字符串 - 力扣(LeetCode) (leetcode-cn.com)