1081. 不同字符的最小子序列

81 阅读1分钟

返回 s 字典序最小的子序列,该子序列包含 s 的所有不同字符,且只包含一次。

示例 1:

输入: s = "bcabc"
输出: "abc"

示例 2:

输入: s = "cbacdcbc"
输出: "acdb"

题解 :

/**
 * @param {string} s
 * @return {string}
 */
var smallestSubsequence = function (s) {
    let stack = [];
    for (let i = 0; i <= s.length - 1; i++) {
        let str = s[i]
        // 栈内是否包含当前元素 有=》跳过循环
        if (stack.includes(str)) continue;
        // 判断:同时满足 栈顶元素出栈
        // 1、stack.length > 0 =》 栈不为空
        // 2、stack[stack.length - 1] > str =》 栈顶元素大于当前值
        // 3、s.indexOf(stack[stack.length - 1], i) > i =》 从当前位置向后还有此元素
        while (
            stack.length > 0 && stack[stack.length - 1] > str && 
            s.indexOf(stack[stack.length - 1], i) > i
        ) {
            stack.pop()
        }
        stack.push(str)
    }
    return stack.join("")
};

来源:力扣(LeetCode)

链接:leetcode.cn/problems/sm…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。