Leetcode P1047 Java使用栈解决此问题
ideas
通过题我们可以得出我们无论是先删除哪一个,都不会影响最终的结果。因此我们可以从左到右处理字符串。
for (int i = 0; i < s.length(); i++)
.........
如果栈中没有元素,那么直接将字符压入栈中,如果栈中有元素,那么就判断栈中的最顶上的元素和我们要压入的元素一样,那么就栈弹出一个元素。如果不一样就压住栈
if (!stack.empty() && stack.peek() == s.charAt(i)) {
stack.pop();
}else{
stack.push(s.charAt(i));
}
接下来使用增强for循环对栈进行操作,扫描出来的结果就是我们题想要的答案
code
class Solution {
public String removeDuplicates(String s) {
StringBuilder stringBuilder = new StringBuilder();
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (!stack.empty() && stack.peek() == s.charAt(i)) {
stack.pop();
}else{
stack.push(s.charAt(i));
}
}
for (Character character : stack) {
stringBuilder.append(character);
}
return stringBuilder.toString();
}
}