栈:
class Solution {
public String removeDuplicates(String s) {
Stack<Character> st=new Stack<>();
char ch;
for(int i=0;i<s.length();i++){
ch=s.charAt(i);
if(st.isEmpty()){
st.push(ch);
}
else if(st.peek()!=ch){
st.push(ch);
}
else{
st.pop();
}
}
String res="";
while(!st.isEmpty()){
res=st.pop()+res;
}
return res;
}
}
class Solution(object):
def removeDuplicates(self, s):
st=list()
for ch in s:
if len(st)==0:
st.append(ch)
elif st[-1]!=ch:
st.append(ch)
else:
st.pop()
return "".join(st)
双指针:
class Solution {
public String removeDuplicates(String s) {
char[] ch=s.toCharArray();
int fast=0,slow=0;
while(fast<ch.length){
ch[slow]=ch[fast];
if(slow==0){
slow++;
}
else if(ch[slow]!=ch[slow-1]){
slow++;
}
else{
slow--;
}
fast++;
}
return new String(ch,0,slow);
}
}
class Solution(object):
def removeDuplicates(self, s):
count=0
slow=0
l=len(s)
while count<l:
if slow>0 and s[slow]==s[slow-1]:
s=s[:slow-1]+s[slow+1:]
slow-=1
else:
slow+=1
count+=1
return s