Keshawn_lu's Blog

Leetcode 1790. 仅执行一次字符串交换能否使两个字符串相等

字数统计: 289阅读时长: 1 min
2022/10/11 Share

题目简介:

给你长度相等的两个字符串 s1s2 。一次 字符串交换 操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。

如果对 其中一个字符串 执行 最多一次字符串交换 就可以使两个字符串相等,返回 true ;否则,返回 false

示例 1:

1
2
3
输入:s1 = "bank", s2 = "kanb"
输出:true
解释:例如,交换 s2 中的第一个和最后一个字符可以得到 "bank"

提示:

  • 1 <= s1.length, s2.length <= 100
  • s1.length == s2.length
  • s1s2 仅由小写英文字母组成

思路:

遍历,找出不相同的两个下标(只找两个),然后交换以后判断字符串是否相同即可。

代码如下:

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;

}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: