LeetCode1370。昇順および降順の文字列

文字列sを指定します。次のアルゴリズムに従って、文字列を再構築してください。

sから最小の文字を選択し、結果文字列の最後に接続します。
sの残りの文字から最小の文字を選択すると、その文字は最後に追加された文字よりも大きくなり、結果の文字列に追加されます。
から文字を選択できなくなるまで、手順2を繰り返します。
sから最大の文字を選択し、結果文字列の最後に接続します。
sの残りの文字から最大の文字を選択すると、その文字は最後に追加された文字よりも小さくなり、結果の文字列に追加されます。
から文字を選択できなくなるまで、手順5を繰り返します。
sのすべての文字が選択されるまで、手順1〜6を繰り返します。
どのステップでも、最小文字または最大文字が複数ある場合は、それらのいずれかを選択して、結果文字列に追加できます。

sの文字を並べ替えた後、結果の文字列を返してください。

1 <= s.length <= 500
sには、小文字の英字のみが含まれます。

ハッシュテーブルを使用して、各文字の出現回数を保存できます。各ループで、ハッシュテーブルを最初から最後まで2回トラバースし、次に最後から最初までトラバースして、時刻が0でない文字を見つけて追加することができます。結果の文字列:

class Solution {
    
    
public:
    string sortString(string s) {
    
    
        vector<int> hashtbl(26);

        for (char c : s) {
    
    
            ++hashtbl[c - 'a'];
        }

        string res;
        while (res.size() != s.size()) {
    
    
            for (int i = 0; i < hashtbl.size(); ++i) {
    
    
                if (hashtbl[i]) {
    
    
                    res += 'a' + i;
                    --hashtbl[i];
                }
            }

            for (int i = hashtbl.size() - 1; i >= 0; --i) {
    
    
                if (hashtbl[i]) {
    
    
                    res += 'a' + i;
                    --hashtbl[i];
                }
            }
        }

        return res;
    }
};

おすすめ

転載: blog.csdn.net/tus00000/article/details/112502666