1 思路分析
因为每次消除的是相邻且相同的字符,所以我们考虑引入辅助栈stack:遍历字符串,每次遇到与栈顶相同的字符就栈顶元素出栈,栈为空或者当前字符与栈顶元素不等,就入栈
step 1:栈为空或者当前字符与栈顶元素不等,就当前元素入栈
step 2:遍历字符串,每次遇到与栈顶相同的字符就栈顶元素出栈
step 3:输出结果,栈空说明最终是空串,直接输出0
step 4:如果不是空串就再引入StringBuffer将结果拼接成一个字符串
step 5:此时StringBuffer存储的是答案的逆序,需要再reverse反转即为正确答案
2 完整代码
import java.util.Scanner;
import java.util.Stack;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String string = in.next();
char[] array = string.toCharArray();
//利用栈解决
Stack<Character> stack = new Stack<>();
//遍历字符数组
for(int i = 0; i < array.length; i++){
//如果栈为空,则直接入栈
if(stack.isEmpty()){
stack.push(array[i]);
}else{
//否则,进行判断
if(stack.peek() == array[i]){
stack.pop();
}else{
stack.push(array[i]);
}
}
}
//输出结果
if(stack.isEmpty()){
System.out.println("0");
}else{
StringBuffer res = new StringBuffer("");
while(!stack.isEmpty()){
res.append(stack.pop()+"");
}
System.out.println(res.reverse());
}
in.close();
}
}