共计 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];
}
正文完
发表至: javascript
2021-08-28