第一种解法 :
解题思路 :
栈 , 很简单 我们使用栈来解决 , 遍历字符串 :
1. 如果栈为空 将让当前下标的字符入栈 , 下标向后移动
2. 栈不为空 , 得到栈顶元素看是否与当前下标的字符相等 ,
相等 : 弹出栈顶元素 , 下标往后移动
不相等 : 把当前下标的字符入栈 下标往后移动
代码实现 :
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
String str1 = in.nextLine();
func(str1);
}
}
public static void func(String str1) {
Stack<Character> stack = new Stack<>();
List<Character> list = new ArrayList<>();
int i = 0;
while (i < str1.length()) {
if (stack.isEmpty()) {
stack.add(str1.charAt(i));
i++;
} else {
char ch = stack.peek();
if (ch == str1.charAt(i)) {
stack.pop();
i++;
} else {
stack.add(str1.charAt(i));
i++;
}
}
}
if (stack.isEmpty()) {
System.out.print(0);
} else {
while (!stack.isEmpty()) {
list.add(stack.pop());
}
}
Collections.reverse(list);
for (char ch : list) {
System.out.print(ch);
}
}
}
第二种解法 :
解题思路 :
使用StringBuilder :
代码实现 :
package demo2;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
String str1 = in.nextLine();
func(str1);
}
}
public static void func(String str1) {
StringBuilder sb = new StringBuilder();
int index = -1;
int i = 0;
while (i < str1.length()) {
if (index == -1) {
sb.append(str1.charAt(i));
index++;
i++;
} else {
if (str1.charAt(i) == sb.charAt(index)) {
sb.deleteCharAt(index);
index--;
} else {
sb.append(str1.charAt(i));
index++;
}
i++;
}
}
if (index == -1) {
System.out.print(0);
} else {
System.out.println(sb);
}
}
}