亲密字符串
题目:
给定两个由小写字母构成的字符串 A
和 B
,只要我们可以通过交换 A
中的两个字母得到与 B
相等的结果,就返回 true
;否则返回 false
。
示例 1:
1 2
| 输入: A = "ab", B = "ba" 输出: true
|
示例 2:
1 2
| 输入: A = "ab", B = "ab" 输出: false
|
示例 3:
1 2
| 输入: A = "aa", B = "aa" 输出: true
|
示例 4:
1 2
| 输入: A = "aaaaaaabc", B = "aaaaaaacb" 输出: true
|
示例 5:
1 2
| 输入: A = "", B = "aa" 输出: false
|
提示:
0 <= A.length <= 20000
0 <= B.length <= 20000
A
和 B
仅由小写字母构成。
解题思路:
// 1 length 判断
// 2 遍历,用两个数组:记录两个数组不同的 a,b,是否等于两个且首尾交换可以相等
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 30
|
var buddyStrings = function(A, B) { if (A.length !== B.length) return false let diffA = '' let diffB = '' let i = 0 while (i < A.length) { if (A[i] !== B[i]) { diffA += A[i] diffB += B[i] } i++ } if (diffA === '') { let temp = A.split("").sort() for (let i = 0; i< temp.length -1 ; i++) { if (temp[i] ===temp[i+1]) return true } return false } if (diffA.length !== 2 || diffB.length !== 2) return false if (diffA[0] === diffB[1] && diffA[1] === diffB[0]) return true return false }
|
PS: 有可能遗漏的点是,当 A 与 B 完全一样的时候,需要判断 A/B 里面是否有重复的字母;判断的时候可以用一个 hash 会更快