删除字符串中的所有相邻重复项(力扣1047)
这题也是属于栈的经典应用。为什么这样说呢?因为也是让我们删除相邻项。注意这里相邻项的理解,并不仅仅是说最开始的字符串相邻的项。在我们删除了某些相邻项后,会改变字符串,导致原本不相邻的字符变成相邻的,这同样属于相邻项。这一系列比对字符再删除的流程恰好适用于用栈来解决。一些注意点我写在代码注释中。
代码如下:
class Solution {
public:
string removeDuplicates(string s) {
stack<char> st;
for(int i = 0;i < s.size();i++){
if(st.empty() || st.top() != s[i]){
st.push(s[i]);
continue;
}
st.pop();
}
//用来存储答案
string result;
//将栈里的字符拼接起来
while(st.empty() != 1){
result += st.top();
st.pop();
}
//最后要反转顺序,因为将字符存入栈之后再弹出,栈顶对应字符串的尾部
reverse(result.begin(),result.end());
return result;
}
};