LeetCode刷题笔记 - 859. 亲密字符串
bool buddyStrings(char* s, char* goal) {
char d = 0;
char gd = 0;
int pair = 0;
int epair = 0;
char map[256] = {0};
if (strlen(s) != strlen(goal)) {
return false;
}
while (*s != '\0') {
if (*s != *goal) {
if (d == 0) {
d = *s;
gd = *goal;
} else {
if (d != *goal || gd != *s) {
return false;
}
d = 0;
gd = 0;
pair++;
}
}
map[*s]++;
if (map[*s] > 1) {
epair++;
map[*s] = 0;
}
s++;
goal++;
}
if (d != 0 || gd != 0) {
return false;
}
if (pair == 0) {
if (epair == 0) {
return false;
} else {
return true;
}
} else {
if (pair != 1) {
return false;
}
}
return true;
}
运行结果
题目
注意点
- 如果原始字符串(
s
)与目标字符串(goal
)里,需要考虑s
内的相同字符对数,最少需要大于一对才能满足条件; - 需要考虑第一次遇到不同字符时,与第二次遇到不通字符时,这个4个字符分别命名为
s[FIRST]
、goal[FIRST]
、s[SECOND]
、goal[SECOND]
的关系如下:
s[FIRST] == goal[SECOND]
goal[FIRST] == s[SECOND]