1、题目描述
给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
在 S 上反复执行重复项删除操作,直到无法继续删除。
在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
2、算法分析
借助栈作为辅助栈,存储的是字符串中的元素,每次向栈中添加元素的时候,都会比较添加的元素和栈顶的元素是否相等,相等话出栈。不等的话进栈。注意是相邻元素的比较。
最后别忘记反转栈中剩余的元素。
StringBuilder里面有一个reverse()方法,存储的就是反转的元素。
3、代码实现
class Solution {
public String removeDuplicates(String s) {
if(s == null || s.length() == 0 || s.length() == 1){
return s;
}
StringBuilder sb = new StringBuilder();
// 栈存储的是字符串的元素
Stack<Character> stack = new Stack<>();
for(int i = 0;i < s.length();i++){
char ch = s.charAt(i);
// 当栈不空的时候,且字符等于栈顶元素
if(!stack.isEmpty() && ch == stack.peek()){
stack.pop();
}else{
stack.push(ch);
}
}
// 将栈中的元素存储到字符串中
while(!stack.isEmpty()){
sb.append(stack.pop());
}
return sb.reverse().toString();
}
}