题目
给出由小写字母组成的字符串 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就不会报这个错。一定要严谨!