该题的模式为简单,但是说实话这题做出来完全就是靠失败的用例一点点补充起来的,要想一次通过感觉还是很难的。
解题思路:
此题可以分为三种大的情况去考虑
1,字符串相等,则只需要至少有两个字符相等则满足亲密字符串要求
2,字符串不等并且长度都不一致,则不满足要求
3,字符串不等,长度一致,则逐次比较相同位置上的字符串,如果字符串不等,则保存相减的值和其中的一个字符串。如果两次不等的值相加等于0,并且不相等的字符串相等,则满足
bool buddyStrings(char * s, char * goal)
{
if(s == NULL || goal == NULL)
return false;
if(strlen(s) != strlen(goal))
return false;
int i = 0;
int k = 0;
int temp[26] = {0};
if(strcmp(s,goal) == 0)
{
for(i=0; i<strlen(s); i++)
{
temp[s[i]-'a']++;
}
for(i=0; i<26; i++)
{
if(temp[i] >= 2)
return true;
}
return false;
}
int arr[3] = {0};
char str;
for(i=0; i<strlen(s); i++)
{
if(s[i] - goal[i] != 0)
{
arr[k++] = s[i] - goal[i];
if(k == 1)
str = s[i];
if(k == 2 && str != goal[i])
return false;
}
if(k == 3)
return false;
}
if(arr[0] != 0 && k==2 && arr[0] + arr[1] == 0 )
return true;
return false;
}
运行结果