给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。
交换字母的定义是取两个下标 i 和 j (下标从 0 开始),只要 i!=j 就交换 A[i] 和 A[j] 处的字符。例如,在 “abcd” 中交换下标 0 和下标 2 的元素可以生成 “cbad” 。
示例
示例 1:
输入: A = “ab”, B = “ba”
输出: true
解释: 你可以交换 A[0] = ‘a’ 和 A[1] = ‘b’ 生成 “ba”,此时 A 和 B 相等。
示例 2:
输入: A = “ab”, B = “ab”
输出: false
解释: 你只能交换 A[0] = ‘a’ 和 A[1] = ‘b’ 生成 “ba”,此时 A 和 B 不相等。
示例 3:
输入: A = “aa”, B = “aa”
输出: true
解释: 你可以交换 A[0] = ‘a’ 和 A[1] = ‘a’ 生成 “aa”,此时 A 和 B 相等。
示例 4:
输入: A = “aaaaaaabc”, B = “aaaaaaacb”
输出: true
示例 5:
输入: A = “”, B = “aa”
输出: false
题解
- 两个字符串长度不相等不符合亲密字符串
- 两个字符串全等,且没有重复字符则不符合亲密字符串
- 遍历字符串找出2个不同位置交换,不全等则不符合亲密字符串
/*** @param {string} s* @param {string} goal* @return {boolean}*/var buddyStrings = function(s, goal) {if (s.length !== goal.length) {return false}if (s === goal) {const map = {}for (let i = 0; i < s.length; i++) {if (!map[s[i]]) {map[s[i]] = true} else {return true}}return false}let indexfor (let i = 0; i < s.length; i++) {if (s[i] !== goal[i]) {if (index === undefined) {index = i} else {const arr = s.split('')const str = arr[i]arr[i] = arr[index]arr[index] = strreturn arr.join('') === goal}}}return false};
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/buddy-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
