原题如下
给定两个字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
示例 1: 输入: s1 = "abc", s2 = "bca" 输出: true
示例 2: 输入: s1 = "abc", s2 = "bad" 输出: false
解法一 暴力解法
不难想到,直接对数组排序,判断两个数组是否相等即可
var CheckPermutation = function(s1, s2) {
let a = Array.from(s1).sort();
let b = Array.from(s2).sort();
return a.join('')===b.join('');
};
解法二 字母表
字符串均为字母构成,可以维护一个字母表,先统计s1中所有字母出现的次数,然后遍历s2,在字母表中减去每次出现的字母次数,最后判断该字母表是否为一维零数组即可
var CheckPermutation = function(s1, s2) {
//边界条件
if(s1.length !== s2.length) return false;
//ascii码字母表
const hashTable = Array(26).fill(0);
for(let i = 0; i < s1.length; i++){
let ascii = s1.charCodeAt(i) - 97;
hashTable[ascii]++;
}
for(let i = 0; i < s2.length; i++){
let ascii = s2.charCodeAt(i) - 97;
hashTable[ascii]--;
}
return hashTable.every(item => item === 0);
};