






cpp
if(st.empty() || st.top() != s[i])
-
栈为空:说明当前字符没有前一个字符可比较,需要特殊处理
-
栈不空但栈顶元素不等于当前字符:说明不是重复字符
**st.pop()函数:**用来移除栈顶元素(前提:栈不为空),但不返回该元素
cpp
string result = "";
-
string:C++标准库中的字符串类型 -
result:变量名(可自定义)
cpp
class Solution {
public:
// 函数:删除字符串中所有相邻的重复字符
string removeDuplicates(string s) {
// 创建一个字符栈,用于存储处理过程中的字符
stack<char> st;
// 遍历输入字符串s中的每个字符
for(int i = 0 ; i < s.size() ; i++){
// 如果栈为空 或者 当前字符与栈顶字符不相同
if(st.empty() || st.top() != s[i]){
// 将当前字符压入栈中
st.push(s[i]);
}
// 否则(当前字符与栈顶字符相同)
else{
// 弹出栈顶字符,消除这一对相邻重复字符
st.pop();
}
}
// 创建一个空字符串,用于存储最终结果
string result = "";
// 当栈不为空时,循环处理栈中剩余的字符
while(!st.empty()){
// 将栈顶字符添加到result字符串末尾
// 注意:栈是后进先出,所以先取出的字符应该是结果字符串后面的字符
result += st.top();
// 弹出栈顶字符,准备处理下一个
st.pop();
}
// 反转result字符串
// 因为从栈中取出的字符顺序是反的(后进先出)
// 反转后得到正确的字符顺序
reverse(result.begin(), result.end());
// 返回处理后的字符串
return result;
}
};