4力扣题做题笔记及复盘--1047. 删除字符串中的所有相邻重复项(栈、字符串)

1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)

1、题外话

这道题目就像是我们玩过的游戏对对碰,如果相同的元素放在挨在一起就要消除。

可能我们在玩游戏的时候感觉理所当然应该消除,但程序又怎么知道该如果消除呢,特别是消除之后又有新的元素可能挨在一起。

此时游戏的后端逻辑就可以用一个栈来实现(我没有实际考察对对碰或者爱消除游戏的代码实现,仅从原理上进行推断)。

2、思路

这道题和匹配问题差不多,只要去查新元素是否和栈顶是相同元素,是就弹栈,不同就入栈,栈保留了结果,对栈进行输出和字符串进行拼接。

3、代码

class Solution {
    public String removeDuplicates(String s) {
        Stack<Character> stack = new Stack<>();
        for(int i=0;i<s.length();i++){
            char c = s.charAt(i);
            if(stack.isEmpty() || stack.peek()!=c){
                stack.push(c);
            }else{
                stack.pop();
            }
        }

        String str = "";
        while(!stack.isEmpty()){
            str = stack.pop()+str;
        }
        return str;
    }
}

4、总结

一开始我卡的地方是栈的输出顺序和要求的字符串顺序不一致,然后可以用拼接的方式完美解决这个问题,把新的元素拼接在老元素前面。

对字符串进行分割:s.charAt(i);得到每个字符,对字符串进行分割是:s.split(" 分割符");

这道题是对栈的运用。对我的字符串操作也起到查缺补漏的作用

 

posted @ 2022-05-22 18:01  jason饼干大怪兽  阅读(33)  评论(0)    收藏  举报