第一版的代码如下下:
点击查看代码
class Solution
{
public:string removeDuplicates(string s){stack<char> str;for (int i = 0; i < s.size(); i++){//要先判断才能进行压栈,再次记住栈一定要先判断是否为空if (str.empty() || s[i] != str.top()){str.push(s[i]);}else{str.pop();}}string t = "";/*在 while 循环中,您尝试通过 t[j] 的方式来给字符串 t 赋值。但是,这样的方式会导致字符串 t 的长度不断增加,并且超出了原先的长度。这会导致访问超出字符串 t 的范围,产生未定义的行为。正确的做法是使用 push_back() 方法将字符逐个添加到字符串末尾。/*int j = 0;while (!str.empty()){t[j] = str.top();str.pop();j++;在 C++ 中,字符串对象是一个动态分配的字符数组,它的大小可以动态增长以容纳新的字符。}*/while (!str.empty()) { // 将栈中元素放到result字符串汇总t += str.top();str.pop();}reverse(t.begin(),t.end());return t;}
};
点击查看代码
class Solution {
public:string removeDuplicates(string s) {//先压进去然后看开头和将要压进去的是否一样,然后循环//最终剩下的再出栈就是最终的字符串int size = s.size();stack<char> myStack;for(int i = 0;i < size; i++){if(!myStack.empty()){if(myStack.top() == s[i]){myStack.pop();continue;}}myStack.push(s[i]);}string result;while(!myStack.empty()){result += myStack.top();myStack.pop();}//注意栈是先进后出的这个顺序是反的reverse(result.begin(), result.end());return result;}
};