写法一
class Solution {
public String removeDuplicates(String s) {
Stack<Character> st = new Stack<Character>();
if(s.length() == 0 ){
return "";
}
st.push(s.charAt(0));
for(int i = 1; i < s.length(); i++){
if(!st.empty() && s.charAt(i) == st.peek()){
st.pop();
}else {
st.push(s.charAt(i));
}
}
String str = "";
while(!st.empty()){
str = st.pop() + str;
}
return str;
}
}
写法二
class Solution {
public String removeDuplicates(String s){
StringBuffer stack = new StringBuffer();
int top = -1;
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(top >= 0 && stack.charAt(top) == ch){
stack.deleteCharAt(top);
top--;
}else{
stack.append(ch);
top++;
}
}
return stack.toString();
}
}
本地测试
package leetcode;
import java.util.Stack;
public class lc_1047_removeDuplicates {
public String removeDuplicates(String s) {
Stack<Character> st = new Stack<Character>();
if(s.length() == 0 ){
return "";
}
st.push(s.charAt(0));
for(int i = 1; i < s.length(); i++){
if(!st.empty() && s.charAt(i) == st.peek()){
st.pop();
}else {
st.push(s.charAt(i));
}
}
String str = "";
while(!st.empty()){
str = st.pop() + str;
}
return str;
}
public static void main(String[] args) {
String s = "abbaca";
lc_1047_removeDuplicates dup = new lc_1047_removeDuplicates();
String ans = dup.removeDuplicates(s);
System.out.println(ans);
}
}