2022.6.30今天你刷题了吗?
题目:
给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。
如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false 。
分析:
对于看两个字符串,通过交换一次字符串,能不能使得两个字符串相等。
思路:遍历其中一个字符串,当下标相同但元素不一样时,把这两个不同的元素分别保存,然后继续遍历,如果又出现不同,则判断此时如果利用之前保存元素和现在需要交换的是不是一样,一样则是可以保存,不一样则不行,并且直接退出。如果一样就行继续判断后续是否还需要交换
解析:
1.暴力求解
class Solution {
public:
bool areAlmostEqual(string s1, string s2) {
char c1='#',c2=c1;
bool isChange=false;
int n=s1.size();
for(int i=0;i<n;i++){
if(s1[i]!=s2[i]){
if(isChange)return false;
else if(c1=='#'){
c1=s1[i];
c2=s2[i];
}
else{
if(c1==s2[i]&&c2==s1[i]){
isChange=true;
c2='#';
}
else return false;
}
}
}
//看c2是否为#
return c2=='#';
}
};