文字列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;
}
};