LeetCode1047. 删除字符串中的所有相邻重复项

题目

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

代码

就跟对对碰一样,栈

 1 class Solution {
 2 public:
 3     string removeDuplicates(string S) {
 4         stack<char>stk;
 5         for(int i = 0;i < S.length();i++){
 6             if(!stk.empty() && S[i] == stk.top() ){
 7                 //注意这里的判断条件必须加上非空
 8                 stk.pop();
 9             }
10             else {
11                 stk.push(S[i]);
12             }
13         }
14         string res; 
15         while(!stk.empty()){
16             char c = stk.top();stk.pop();
17             res.push_back(c);
18         }
19         reverse(res.begin(),res.end());
20         return res;
21     }
22 };

注意:对栈使用pop()方法时,一定要确保栈非空,否则会报非法访问内存空间的错误,LeetCode编译器会报这个错,但vs就不会报这个错。一定要严谨!

posted @ 2021-01-26 18:08  Uitachi  阅读(82)  评论(0编辑  收藏  举报