859. 亲密字符串

image-20211123100009764

解题思路:

​ 这题主要是考察对题目的理解,跳脱出对s交换得到所有情况判断的思路。

分为两种情况:

  • s==goal且存在某个i!=j使得s[i]==s[j]
  • 存在某个i!=j使得s[i]==goal[j]且s[j]==goal[i],并且s与goal的其他字符都相等(前提s[i]!=s[j],区别于第一种情况)

以下为C++代码:

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
31
32
33
34
35
36
class Solution {
public:
bool buddyStrings(string s, string goal) {
//分为两种情况:
//第一种:s==goal且存在某个i!=j使得s[i]==s[j]
//第二种:存在某个i!=j使得s[i]==goal[j]且s[j]==goal[i]

if(s==goal){
int count[26]={0};
int len=s.size();
for(int i=0;i<len;i++){
count[s[i]-'a']++;
if(count[s[i]-'a']>1){
return true;
}
}
}else if(s.size()==goal.size()){
int first=-1;
int second=-1;
int len=s.size();
for(int i=0;i<len;i++){
if(s[i]!=goal[i]){
if(first==-1){
first=i;
}else if(second==-1){
second=i;
}else{
return false;
}
}
}
return (first!=-1&&second!=-1&&s[first]==goal[second]&&s[second]==goal[first]);
}
return false;
}
};