去除重复的字符串

458 阅读1分钟

给定一个仅包含小写字母的字符串,去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 示例1

输入: "bcabc" 输出: "abc" 示例2 输入: "cbacdcbc" 输出: "acdb" 解析: 建立两个json对象 _obj 和 _objVisited 结果放到 res = [] 数组中, 字典排序就是每个字母出现一次,但是最后结果中,某个字母的在结果中的排序必须在给出的字符串中比该字符大的前面

var removeDuplicateLetters = function (s) {
      var _obj = {};
      var _objVisited = {}
      var res = []
      for (var i = s.length - 1; i >= 0; i--) {
        _objVisited[s[i]] = false
        if (!_obj[s[i]]) {
          _obj[s[i]] = 1
        } else {
          _obj[s[i]] += 1
        }
      }

      console.log(_obj)
      console.log(_objVisited)

      for (var i = 0; i < s.length; i++) {
        // if (res.length === 0) res.push(s[i])
        _obj[s[i]]--
        if (res.length === 0 || !_objVisited[s[i]]) {
          _objVisited[s[i]] = true
          while (res.length > 0) {
            if (res[res.length - 1] > s[i] && _obj[res[res.length - 1]] > 0) {
              _objVisited[res[res.length - 1]] = false
              res.pop();
            } else {
              break
            }
          }
          res.push(s[i])
        }
      }
      return res.join("")
    };