02 判定是否互为字符重排
判定是否互为字符重排
题目描述
给定两个字符串 s1
和 s2
,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1:
输入: s1 = “abc”, s2 = “bca” 输出: true
示例 2:
输入: s1 = “abc”, s2 = “bad” 输出: false
说明:
0 <= len(s1) <= 100
0 <= len(s2) <= 100
解法
- 分别给 s1 和 s2 创建字典,记录每个字母的出现次数
- 对比字典
- 现对比两个字段的 keys 长度是否一致
- 然后遍历一个字典的 keys,放在 s1 和 s2 的字典中取值进行对比,若完全一致则返回 true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function isLiklyStr(str1, str2) {
const dict1 = {},
dict2 = {};
for (const i in str1) {
const element = str1[i];
if (!dict1[element]) dict1[element] = 1;
if (dict1[element]) dict1[element]++;
}
for (const i in str2) {
const element = str2[i];
if (!dict2[element]) dict2[element] = 1;
if (dict2[element]) dict2[element]++;
}
if (Object.keys(dict1).length !== Object.keys(dict2).length) return false;
for (const key of Object.keys(dict1)) {
if (dict1[key] !== dict2[key]) return false;
}
return true;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* @param {string} s1
* @param {string} s2
* @return {boolean}
*/
var CheckPermutation = function (s1, s2) {
if (s1.length !== s2.length) return false;
const dict1 = {},
dict2 = {};
for (const i in s1) {
if (!dict1[s1[i]]) dict1[s1[i]] = 1;
if (dict1[s1[i]]) dict1[s1[i]]++;
if (!dict2[s2[i]]) dict2[s2[i]] = 1;
if (dict2[s2[i]]) dict2[s2[i]]++;
}
for (const key of Object.keys(dict1)) {
if (dict1[key] !== dict2[key]) return false;
}
return true;
};
本文由作者按照
CC BY 4.0
进行授权