题目名称

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

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

示例

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

题解

遍历字符串,找出只包含两个不同处的且可互换的字符串

答案

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
29
/**
* @param {string} s1
* @param {string} s2
* @return {boolean}
*/
var areAlmostEqual = function(s1, s2) {
if(s1 === s2) return true
if(s1.length !== s2.length) return false
let d1 = "", d2 = "", hash = {}, index = 0
for(let i = 0; i < s1.length; i++) {
if(s1[i] !== s2[i]) {
if(index > 2) return false
index++
if(!d1) {
d1 = s1[i]
d2 = s2[i]
} else {
if(d1 !== s2[i] || d2 !== s1[i]) {
return false
} else {
d1 = ""
d2 = ""
}
}
}
}
if(d1) return false
return true
};