描述
牛牛拿到了一个字符串。
他每次“点击”,可以把字符串中相邻两个相同字母消除,例如,字符串"abbc"点击后可以生成"ac"。
但相同而不相邻、不相同的相邻字母都是不可以被消除的。
牛牛想把字符串变得尽可能短。他想知道,当他点击了足够多次之后,字符串的最终形态是什么?输入描述:
一个字符串,仅由小写字母组成。(字符串长度不大于300000)
输出描述:
一个字符串,为“点击消除”后的最终形态。若最终的字符串为空串,则输出0。
示例1
输入:
abbc输出:
ac示例2
输入:
abba输出:
0复制
示例3
输入:
bbbbb输出:
b
public static void main(String[] args) {
//Character是字符类型
Stack<Character> stack = new Stack();
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
for(int i = 0; i<str.length();i++){
//如果是空栈,则直接入栈
if(stack.empty()){
stack.push(str.charAt(i));
//如果相等,则出栈
}else if(str.charAt(i) == stack.peek()){
stack.pop();
}else {
//如果不空也不相等,直接入栈
stack.push(str.charAt(i));
}
}
//如果最后是空
if (stack.empty())
System.out.println(0);
String s = "";
while(!stack.empty()){
s = s + stack.pop();
}
//因为栈顶元素在前面,得反过来
for (int i = s.length()-1; i >= 0; i--) {
System.out.print(s.charAt(i));
}
}