给出一个字符串,每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。
但相同而不相邻、不相同的相邻字母都是不可以被消除的。如果一直点击,字符串的最终形态是什么?
整理要求:
1、一个字符串
2、消除相邻的两个元素
3、打印最终元素
思路:把它看成入栈与出栈,如果相邻的两次入栈元素相同,就让栈顶元素出栈,最后打印结果。
[Java] 纯文本查看 复制代码 public static void main(String[] args) {
Stack<Character> stack = new Stack();
Scanner sc =new Scanner(System.in);
String str = sc.nextLine();
for(int i =0;i<str.length();i++){
char ch =str.charAt(i);
if(stack.isEmpty() || ch !=stack.peek()){
stack.push(ch);
}else if(ch == stack.peek()){
stack.pop();
}
}
String str2 ="";
//输出if(stack.isEmpty()){//如果是空栈,打印0
System.out.println(0);
}else{//如果不是空栈,循环出栈,反转字符串
while(!stack.isEmpty()){
str2 += stack.pop(); //将出栈的元素赋值给 str2,但这个str2是出栈的顺序,是反着的
}
}
String str3 =""; //使用str3来反转str2
for(int i=str2.length()-1;i>=0;i--){
str3 += str2.charAt(i);
}
System.out.println(str3); //打印结果
} |