リンク:https://leetcode-cn.com/problems/remove-all-adjacent-duplicates-in-string/
ストリングSは小文字、削除複製および選択に隣接する2つの同一の文字で与えられ、そしてそれらを削除されています。
S上で実行することを繰り返し、削除を複製削除されるまで継続することはできません。
すべての重複削除が完了した後、最終的な文字列を返します。唯一の答え保証。
例:
入力:「abbaca」
出力:「CA」
の解釈:
例えば、「abbaca」で、我々は隣接する二つの文字と同じように、「BB」を削除することができますが、これはこの時期だけは、削除操作を行うことができます複製されます。我々が取得した後、最終的な文字列は、「CA」であるので、唯一の「AA」を持っている文字列「AACA」は、削除重複を行うことができます。
ヒント:
1 <= s.length <= 20000
Sのみ小文字によって。
A、スタックと、最後のアウトスタックは、特性を持っているので、逆方向が決定されるように。
class Solution {
public:
string removeDuplicates(string S) {
int len = S.size();
stack<char> ans;
string temp = "";
ans.push(S[len - 1]);
for(int i = (len - 2); i >= 0; i--)
{
// 注意栈为空时直接把字符压入栈即可
if(!ans.empty() && S[i] == ans.top())
{
ans.pop();
}
else
{
ans.push(S[i]);
}
}
while(!ans.empty())
{
temp += ans.top();
ans.pop();
}
return temp;
}
};
第二に、直接によって付加文字列、および文字列の終わりが繰り返されているかどうかを判断し、複数の文字列の使用は、機能を学びました
class Solution {
public:
string removeDuplicates(string S) {
string ans = "";
int len = S.size();
ans.push_back(S[0]);
for(int i = 1; i < len; i++)
{
// 注意字符串为空时直接把字符加入字符串末尾中即可
if((ans.size() != 0) && S[i] == ans.back()) ans.pop_back();
else ans.push_back(S[i]);
}
return ans;
}
};