1047删除字符串中所有的相邻重复项

1047删除字符串中所有的相邻重复项

下面是题目

下面是题目给出的模板

1
2
3
4
5
class Solution {
public:
string removeDuplicates(string S) {
}
};

这里给出两个解法,第一种是我自己想出来的原始解法,第二种是高人做的

1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
string removeDuplicates(string S) {
stack<char>s;
//首先压栈,如果有元素和栈顶重复,那么需要pop
for(char n:S)
{
if(!s.empty()&&n==s.top())
s.pop();
else
s.push(n);
}
string ans;
//把栈里面的元素赋值给字符串,使用头插法
//直接赋值再使用reverse函数会导致超时
//即使这样,运行时长也很多
while(!s.empty())
{
temp=ans;
ans=s.top();
ans+=temp;
s.pop();
}
return ans;
}
};

2.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//短小且精悍
class Solution {
public:
string removeDuplicates(string S) {
int top = 0;
//同样的是遍历S,不过他用在原字符串的基础上改,而不是另起炉灶
//这个top可以看作是“新”字符串的长度
for(char ch : S) {
//如果“新“字符串长度为0或者相邻数字是不重复的,那么将修改
if(top == 0 || S[top-1] != ch) S[top++] = ch;
//否则,如果相邻数字是重复的话,那么长度-1,下次修改string的时候
//会直接覆盖掉原来重复的第一个数字!妙
else top--;
}
//最后,重新规定S的长度,让他等于新字符串的长度,鸠占鹊巢
S.resize(top);
return S;
}
};
-------------本文结束,感谢您的阅读-------------