利用栈的基本操作,设计算法,对给定字符串s进行处理,依次消除相等的相邻字符对,最后使得其中任意的相邻字符不相等,其他字符的次序不变
时间: 2023-05-25 15:03:34 浏览: 90
编写算法,利用栈判断所给字符串是否具有中心对称关系(回文).doc
算法思路:
1. 创建一个栈;
2. 遍历字符串s的每一个字符,如果栈为空,或者栈顶元素和当前字符不相等,则将当前字符入栈;
3. 如果栈顶元素和当前字符相等,则弹出栈顶元素,即消去相邻的相等字符;
4. 最终栈中剩余的字符即为答案字符串。
算法实现:
C++代码如下:
```c++
#include <iostream>
#include <stack>
using namespace std;
string removeAdjDup(string s) {
stack<char> stk;
for (char c : s) {
if (stk.empty() || stk.top() != c)
stk.push(c);
else
stk.pop();
}
string ans = "";
while (!stk.empty()) {
ans += stk.top();
stk.pop();
}
reverse(ans.begin(), ans.end());
return ans;
}
int main() {
string s = "abbaca";
cout << removeAdjDup(s) << endl; // ac
return 0;
}
```
Python3代码如下:
```python
class Solution:
def removeDuplicates(self, s: str) -> str:
stk = []
for c in s:
if not stk or stk[-1] != c:
stk.append(c)
else:
stk.pop()
return "".join(stk)
if __name__ == "__main__":
s = "abbaca"
print(Solution().removeDuplicates(s)) # ac
```
时间复杂度:$O(n)$,其中$n$为字符串的长度。遍历一遍字符串,每个字符最多入栈一次,出栈一次。
空间复杂度:$O(n)$,其中$n$为字符串的长度。栈中最多存储所有字符。
阅读全文