前端面试题 - 8. 去除字符串中出现次数最少的字符,不改变原字符串的顺序。

129 阅读1分钟

题目

实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。

输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于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 优化