第一版的程式碼如下下:
點選檢視程式碼
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;
}
};