JS每日一题 leetcode 01.02 判定是否互为字符重排

100 阅读1分钟

原题如下

给定两个字符串 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);
};