我的js算法爬坑之旅-去除重复字母

122 阅读1分钟

第七十四天:力扣316题,去除重复字母

地址:leetcode-cn.com/problems/re…

思路:stack作为栈按字典序存放 如果stack已经存放过了,说明是按照当前字典序最小排列的,所以continue 如果遇见了比栈顶小的并且在字符串s之后仍然可以遇到栈顶的字符全部弹出; 将该小的入栈

var removeDuplicateLetters = function (s) {
  var stack = []
  for (var i = 0; i < s.length; i++) {
    var char = s[i]
    if (stack.indexOf(char) > -1) continue
    while (stack.length > 0 && stack[stack.length - 1] > char && s.indexOf(stack[stack.length - 1], i) > i) {
      stack.pop()
    }
    stack.push(char)
  }
  return stack.join('')
}

执行用时:100 ms, 在所有 JavaScript 提交中击败了63.46%的用户

内存消耗:39.5 MB, 在所有 JavaScript 提交中击败了68.75%的用户