Skip to content
On this page

1047-删除字符串中的所有相邻重复项

标签: 字符串

题目信息

题目地址1047. 删除字符串中的所有相邻重复项

题目内容:

javascript
给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在S上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:
    输入:"abbaca"
    输出:"ca"
解释:
    例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,
    这是此时唯一可以执行删除操作的重复项。
    之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,
    所以最后的字符串为 "ca"
 
提示:
    11 <= S.length <= 20000
    2、S 仅由小写英文字母组成。

题解

解法一

思路:

定义一个最终结果字符串res = ''

遍历原字符串s,比较res末位(最后一位)也就是上一次遍历到的字符串和s当前遍历的字符串curStr是否相等

如果相等,就将res末位去掉,继续下一次遍历

如果不相等,就讲当前遍历的字符串curStr拼接到res后面

最后返回res即可

代码实现:

javascript
/**
 * @param {string} s
 * @return {string}
 */
var removeDuplicates = function(s) {
    let res = ''
    for(let i = 0; i < s.length; i++) {
        // 取上次遍历的字符串
        const prevStr = res.slice(-1)
        // 取当前遍历的字符串
        const curStr = s[i]
        if(prevStr === curStr) {
            res = res.substring(0, res.length - 1)
            continue
        }
        res = `${res}${curStr}`
    }
    return res
};

解法二

思路:

使用来解决

定义一个数组res,也就是栈结构

遍历字符串s,获得当前遍历的字符串,然后获取栈顶元素

如果栈顶元素和当前遍历到的字符串相等,就让栈顶元素出栈

否则就将当前遍历的字符串放到栈顶,直到遍历结束

最后返回数组拼接的字符串

代码实现:

javascript
/**
 * @param {string} s
 * @return {string}
 */
var removeDuplicates = function(s) {
    let res = []
    for(let i = 0; i < s.length; i++) {
        if(res[res.length - 1] === s[i]) {
            res.pop()
            continue
        }
        res.push(s[i])
    }
    return res.join('')
};