思路:遍历找不同,要么全相同,要么只有两处不同,最后单独判断这两处交换是否相同。
时间复杂度: $O(n)$
class Solution {
public:
bool areAlmostEqual(string s1, string s2) {
if (s1 == s2) return true;
vector<int> dif; //不同值的下标
int cnt = 0;
for (int i = 0; i < s1.size(); i ++ )
if (s1[i] != s2[i])
{
cnt ++ ;
dif.push_back(i);
}
if (cnt != 2) return false; //有一处不同或两处以上不同都无法通过一次交换使俩字符串相等
if (s1[dif[0]] == s2[dif[1]] && s1[dif[1]] == s2[dif[0]]) return true;
return false;
}
};