题目
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。
输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
删除字符串中出现次数最少的字符后的字符串。
示例1:
Input:abcdd
Output:dd
示例2:
Input:aabbcc
Output:""
思路
map或者a-z的桶
实现
const foo = (str: string = '') => {
const map: Record<string, number> = {}
for(let i = 0; i < str.length; i++) {
const char = str[i];
map[char] = (map[char] || 0) + 1;
}
let min = Number.MAX_VALUE;
const keys = Object.keys(map);
for(let i = 0; i < keys.length; i++) {
const k = keys[i]
if(map[k] < min) {
min = map[k];
}
}
if(min === Number.MAX_VALUE) return str;
let ret = ''
for(let i = 0; i < str.length; i++) {
const char = str[i];
if(map[char] === min) continue;
ret += char;
}
return ret;
}
TODO 优化