当前位置: 首页 > 科技观察

今日算法:删除字符串中所有相邻的重复项

时间:2023-03-16 16:08:05 科技观察

给定一个由小写字母组成的字符串S,重复删除操作选择两个相邻且相同的字母,并将它们删除。对S重复重复数据删除操作,直到无法进一步重复数据删除。在所有重复数据删除操作完成后返回最终字符串。答案保证是唯一的。示例:输入:"abbaca"输出:"ca"解释:例如,在"abbaca"中,我们可以删除"bb"由于两个字母相邻且相同,这是此时唯一可以删除的重复项。然后我们得到字符串“aaca”,这里同样只有“aa”可以被去重,所以最终的字符串是“ca”。Tips:<=S.length<=20000S只由小写英文字母组成。解决方法:利用栈解决问题:遍历字符串,一个一个入栈,入栈时判断是否与栈头元素一致。不需要将元素压入堆栈。解题步骤:遍历字符串,取出栈顶字符,判断当前字符与栈顶字符是否一致。栈顶字符入栈,当前字符入栈。邻居,不用入栈,直接进行下一次遍历。遍历完成后返回栈中的字符串代码,实现:constremoveDuplicates=function(S){letstack=[]for(cofS){letprev=stack.pop()if(prev!==c){stack.推送(上一个)stack.push(c)}}returnstack.join('')};时间复杂度:O(n)空间复杂度:O(n