White's Studio.

Leetcode-亲密字符串

2018/08/09 Share

亲密字符串

题目:

给定两个由小写字母构成的字符串 AB ,只要我们可以通过交换 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

提示:

  1. 0 <= A.length <= 20000
  2. 0 <= B.length <= 20000
  3. AB 仅由小写字母构成。

解题思路:

// 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
/**
* @param {string} A
* @param {string} B
* @return {boolean}
*/
var buddyStrings = function(A, B) {
// 1 lenght
// 2 遍历,用两个数组:记录两个数组不同的 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 会更快

CATALOG
  1. 1. 亲密字符串
    1. 1.1. 题目:
    2. 1.2. 解题思路: