1047は、文字列内のすべての隣接する重複したエントリを削除します

リンク: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;
    }
};

 

公開された58元の記事 ウォンの賞賛6 ビュー7032

おすすめ

転載: blog.csdn.net/weixin_43569916/article/details/104096085