题目
方法一 比较
-
扫描S,往sb添加。
-
相似做法:合并区间
- 如果遇到重复的,就把sb最后一位删掉,用
sb.deleteCharAt()
- 没有重复,append到sb末尾
- 如果遇到重复的,就把sb最后一位删掉,用
class Solution {
public String removeDuplicates(String S) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < S.length(); i++) {
if (sb.length() == 0 || sb.charAt(sb.length() - 1) != S.charAt(i)) {
sb.append(S.charAt(i));
} else {
sb.deleteCharAt(sb.length() - 1);
}
}
return sb.toString();
}
}
方法二 用stack
class Solution {
public String removeDuplicates(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
if (!stack.isEmpty() && s.charAt(i) == stack.peek()) {
stack.pop();
} else {
stack.push(s.charAt(i));
}
}
StringBuffer sb = new StringBuffer();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
return sb.reverse().toString();
}
}