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(" 分割符");
这道题是对栈的运用。对我的字符串操作也起到查缺补漏的作用