「每日LeetCode」2020年12月8日

本文最后更新于:2023年3月19日 晚上

面试题 01.02. 判定是否互为字符重排

面试题 01.02. 判定是否互为字符重排

难度简单 20 收藏分享切换为英文接收动态反馈
给定两个字符串 s1s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:

1
2
输入: s1 = "abc", s2 = "bca"
输出: true

示例 2:

1
2
输入: s1 = "abc", s2 = "bad"
输出: false

说明:

  • 0 <= len(s1) <= 100
  • 0 <= len(s2) <= 100

思路

哈希表

遍历一次统计字符加入哈希表,再遍历另外一个字符,删除响应的元素,最后剩下空对象则为重排字符

排序

比较排序后结果是否相同

解答

哈希表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* @param {string} s1
* @param {string} s2
* @return {boolean}
*/
var CheckPermutation = function (s1, s2) {
const obj = {};
for (const arr of s1) {
if (obj[arr]) obj[arr] += 1;
else obj[arr] = 1;
}
for (const arr of s2) {
if (obj[arr] >= 1) obj[arr] -= 1;
else return false;
}
return !Object.values(obj).filter((e) => e !== 0).length;
};

排序

1
2
3
4
5
6
7
8
/**
* @param {string} s1
* @param {string} s2
* @return {boolean}
*/
var CheckPermutation = function (s1, s2) {
return s1.split("").sort().join("") === s2.split("").sort().join("");
};