如何将这段涉及到Sets的Python代码翻译成JavaScript?

3

https://leetcode.com/problems/remove-duplicate-letters/description

给定一个只包含小写字母的字符串,删除重复的字母,使得每个字母仅出现一次。你必须确保你得到的结果是所有可能结果中字典序最小的。
例子: 给定 "bcabc",返回 "abc" 给定 "cbacdcbc",返回 "acdb"
Python:
def removeDuplicateLetters(self, s):
    for c in sorted(set(s)):
        suffix = s[s.index(c):]
        if set(suffix) == set(s):
            return c + self.removeDuplicateLetters(suffix.replace(c, ''))
    return ''

上述是正确的解决方案,因此我尝试将其转换为JavaScript。

var removeDuplicateLetters = function(s) {
  for (var c of new Set(s.split('').sort())) {
    var suffix = s.substring(s.indexOf(c));
    if (setsAreEqual(new Set(suffix), new Set(s))) {
      return c + removeDuplicateLetters(suffix.replace(c, ''));
    }
  }
  return '';
};

const setsAreEqual = (a, b) => a.size === b.size && [...a].every(x => b.has(x));

console.log(removeDuplicateLetters("cbacdcbc"));

我的翻译为什么会给出错误的答案acdbc而不是acdb

我的翻译有哪里出错了?


使用 Python 中的一行代码可以去除重复项:"".join(sorted((set("cbacdcbc")))) - Sailesh Kotha
2
@sailesh 我认为这个问题不仅仅是要删除重复的字母。否则,JS 可以这样写 -> Array.from(new Set("cbacdcbc".split(""))).sort().join('') - Keith
1个回答

1
JavaScript的replace方法并不是全局替换,它只会替换第一个匹配项。将JavaScript代码更改为.replace(new RegExp(c, 'g'), '')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接