返回 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)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。