关于javascript:Leetcode-1047-删除字符串中的所有相邻重复项

31次阅读

共计 575 个字符,预计需要花费 2 分钟才能阅读完成。

给出由小写字母组成的字符串 S,反复项删除操作会抉择两个相邻且雷同的字母,并删除它们。

在 S 上重复执行反复项删除操作,直到无奈持续删除。

在实现所有反复项删除操作后返回最终的字符串。答案保障惟一。

示例:

输出:”abbaca”
输入:”ca”
解释:
例如,在 “abbaca” 中,咱们能够删除 “bb” 因为两字母相邻且雷同,这是此时惟一能够执行删除操作的反复项。之后咱们失去字符串 “aaca”,其中又只有 “aa” 能够执行反复项删除操作,所以最初的字符串为 “ca”。

解题思路

应用一个栈,如果以后栈为空或者栈顶元素不与以后遍历元素雷同,则间接入栈,如果栈顶元素与以后遍历的元素雷同,则栈顶元素弹栈,以此类推。

const removeDuplicates = (s) => {let stack = [];
  for (let i=0; i<s.length; i++) {const char = s[i];
    const topEle = getTopEle(stack);
    if (topEle == "" || char != topEle) {stack.push(char);
    } else {stack.pop();
    }
  }
  return stack.join("");
};

const getTopEle = (stack) => {if (!stack.length) return "";
  return stack[stack.length - 1];
}

正文完
 0