0
点赞
收藏
分享

微信扫一扫

leetcode 722. 去除重复字母

问题描述

给定一个字符串 s,需要去除重复的字母,只保留第一次出现的字母,返回去除重复字母后的最小可能字符串。

解法一

解题思路:

为了解决这个问题,我们可以采用贪心算法和栈(Stack)数据结构。首先,我们记录每个字符出现的次数,然后遍历字符串,对于每个字符,如果它在栈中已经存在,则跳过;如果不存在,则将其压入栈中,并更新字符出现的次数。当字符出现次数变为0时,从栈中移除。这样,我们可以得到一个没有重复字符的字符串。最后,将栈中的字符拼接起来,就得到了最终的结果。

/*
 * @lc app=leetcode.cn id=722 lang=javascript
 *
 * [722] 去除重复字母
 */

// @lc code=start
function removeDuplicateLetters(s) {
    const count = new Array(26).fill(0);
    const stack = [];
    const seen = new Set();

    for (const char of s) {
        count[char.charCodeAt(0) - 'a'.charCodeAt(0)]++;
    }

    for (const char of s) {
        count[char.charCodeAt(0) - 'a'.charCodeAt(0)]--;
        if (!seen.has(char)) {
            seen.add(char);
            while (stack.length && char < stack[stack.length - 1] && count[stack[stack.length - 1].charCodeAt(0) - 'a'.charCodeAt(0)] > 0) {
                seen.delete(stack.pop());
            }
            stack.push(char);
        }
    }

    return stack.join('');
}
// @lc code=end
举报

相关推荐

0 条评论