删除字符串中的所有相邻重复项
基本上就是运用栈的数据结构来解决问题
第一种解法(比较快)
/*这里做一个记录
这个算法跑起来很慢
是因为一开始的结果在栈里,但是没有办法倒叙取出来,又新建了一个栈,放进去取出来就正确了,
但是用StringBuilder里的reverse函数可以很快的解决问题
*/
class Solution {
public String removeDuplicates(String S) {
// 新建一个栈存放并且用于判断
Stack stack = new Stack();
char[] chars = S.toCharArray();
if(chars.length == 1){
return S;
}
for(char c : chars){
//如果这个栈是空的,或者这个栈的栈顶元素和此时循环中的元素不一样 就push进去
if(stack.isEmpty() == true || stack.peek().equals(c) == false){
stack.push(c);
}
//如果此时循环的元素和栈顶一样 就弹出这个元素
else if(stack.peek().equals(c) == true){
stack.pop();
}
}
//如果栈为空 说明全部消除了
if(stack.isEmpty()){
return "";
}
//利用stringbuilder反转得到的字符串
int size = stack.size();
StringBuilder sb =new StringBuilder();
while(!stack.empty()){
sb.append(stack.pop());
}
return sb.reverse().toString();
//Stack resultStack = new Stack();
// while(!stack.isEmpty()){
//resultStack.push(stack.pop());
//}
//String resuleString = "";
// while(!resultStack.isEmpty()){
//resuleString = resuleString+resultStack.pop();
//}
//return resuleString;
}
}
第二种方法(挺慢的)
class Solution {
//这个方法和上一个思路基本一样,只是把栈变成了string string也可以当成栈用
public String removeDuplicates(String S) {
char[] chars = S.toCharArray();
if(S.length() == 1){
return S;
}
String sb = "";
for(char c : chars){
if(sb.isEmpty() == true || sb.charAt(sb.length()-1) != c){
sb += c;
}
else if(sb.charAt(sb.length()-1) == c){
sb = sb.substring(0,sb.length()-1);
}
}
return sb;
}
}