JavaScript 删除字符串中出现次数最少的字符「哈希」🧮

算法思路

题目要求删除字符串中出现次数最少的字符。如果最少出现的字符有多个,则都需要删除。剩下的字符按照原来的顺序输出。

思路分析

  1. 统计字符频率
    • 使用一个哈希表(Map 或者对象)来统计每个字符在字符串中的出现次数。
  2. 找出最少出现次数的字符
    • 遍历哈希表,找出出现次数最少的字符。若有多个字符出现次数相同,则这几个字符都要删除。
  3. 生成结果字符串
    • 遍历原字符串,删除所有出现次数最少的字符,剩下的字符按原顺序保留。

Code

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // 读取输入
    const str = await readline();

    // 统计每个字符的出现次数
    let freq = {};
    for (let char of str) {
        freq[char] = (freq[char] || 0) + 1;
    }

    // 找到最少出现的字符次数
    let minCount = Math.min(...Object.values(freq));

    // 过滤掉所有出现次数最少的字符
    let result = "";
    for (let char of str) {
        if (freq[char] !== minCount) {
            result += char;
        }
    }

    // 输出结果
    console.log(result);
}();

复杂度分析

  • 时间复杂度O(n),其中 n 是输入字符串的长度。遍历字符串一次用于统计频率,遍历一次用于构建结果字符串。整体时间复杂度为线性。
  • 空间复杂度O(1),由于字符串长度限制为 20,因此哈希表的最大大小也为 26(字符集只有小写字母),空间复杂度是常数级的。