JavaScript 删除字符串中出现次数最少的字符「哈希」🧮
算法思路
题目要求删除字符串中出现次数最少的字符。如果最少出现的字符有多个,则都需要删除。剩下的字符按照原来的顺序输出。
思路分析:
- 统计字符频率:
- 使用一个哈希表(
Map
或者对象)来统计每个字符在字符串中的出现次数。
- 使用一个哈希表(
- 找出最少出现次数的字符:
- 遍历哈希表,找出出现次数最少的字符。若有多个字符出现次数相同,则这几个字符都要删除。
- 生成结果字符串:
- 遍历原字符串,删除所有出现次数最少的字符,剩下的字符按原顺序保留。
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(字符集只有小写字母),空间复杂度是常数级的。