1.题目详情:
2.实例:
3.分析:
思路就是栈 一个个对比 空的时候入栈 然后不为空的时候 拿到目标元素 如果目标元素跟栈顶元素相同 就不给入栈 而且还要把相同的那个栈顶元素给出栈(不要它了) 如果目标元素跟栈顶元素不一样直接入栈就可以
4.具体实现:
package com.ffyc.algorithm;
import java.util.EmptyStackException;
import java.util.Stack;
public class stack1047 {
//力扣 栈和队列
//题目:1047. 删除字符串中的所有相邻重复项
/*描述:
给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
*/
public String removeDuplicates(String s) {
Stack<Character> stack=new Stack<>();//Character
for (int i=0;i<s.length();i++){
char ss= s.charAt(i);//拿到字符串一个个字符
if (stack.isEmpty()||ss!=stack.peek()){//如果栈为空 直接给入 再来元素的时候||可以忽视如果为空的情况 当ss跟栈顶元素不相同 入栈
stack.push(ss);
}else{ //如果跟栈顶元素相同 不入栈 把相同的弹出
stack.pop();
}
}
//一个个拿出来组装成一个字符串
String str="";
while (!stack.isEmpty()){//栈不是空就循环
str=stack.pop()+str;//注意弹出来的顺序 str+=stack.pop()就不行 顺序反了
}
return str;
}
public static void main(String[] args) {
stack1047 stack1047=new stack1047();
String s="abbccanm";
System.out.println(stack1047.removeDuplicates(s));
}
}
5.运行测试:
6.力扣提交: