亲密字符串
思路:刚开始没有什么思路,仔细思考后发现,既然只能调换2个位子,那就说明这2个字符串一定是等长的,而且不同的只有2个字符!
遍历,记录第一个不同的位置下标和第二个不同位置的下标!first second ;如果只有两个不同,且(s[first]==goal[second])&&(s[second]==goal[first]),说明true;
但是如果全部是一样的字符,还需要特殊处理!比如:abab,0与2交换也是正常的,所以当字符串是一样的时候,需要查询字符串当中有没有超过2个的字符,如果有,则true;
代码如下:
class Solution {
public:
bool buddyStrings(string s, string goal) {
if(s.size()!=goal.size()) return false;
int count1=0;
int first=0,second=0;
for(int i=0;i<s.size();++i)
{
if(s[i]!=goal[i])
{
if(count1==0)
{
first=i;
}
if(count1==1)
{
second=i;
}
count1++;
}
}
if(count1==2&&(s[first]==goal[second])&&(s[second]==goal[first]))
{
return true;
}
else if(!count1)
{
for(int i=0;i<s.size();++i)
{
if(count(s.begin(),s.end(),s[i])>1)
{
return true;
}
}
}
return false;
}
};
运用的函数:
count(迭代器,迭代器,查询的元素)