题目简介:
给你长度相等的两个字符串 s1
和 s2
。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。
如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true
;否则,返回 false
。
示例 1:
1 2 3
| 输入:s1 = "bank", s2 = "kanb" 输出:true 解释:例如,交换 s2 中的第一个和最后一个字符可以得到 "bank"
|
提示:
1 <= s1.length, s2.length <= 100
s1.length == s2.length
s1
和 s2
仅由小写英文字母组成
思路:
遍历,找出不相同的两个下标(只找两个),然后交换以后判断字符串是否相同即可。
代码如下:
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
| class Solution { public: bool areAlmostEqual(string s1, string s2) {
if(s1 == s2) return true;
int idx = -1; int idx2 = -1; for(int i = 0; i < s1.size(); i++){
if(idx == -1 && s1[i] != s2[i]) idx = i; else if(s1[i] != s2[i]){
idx2 = i; break; } }
if(idx2 == -1) return false;
swap(s1[idx], s1[idx2]); return s1 == s2;
} };
|