整列キュー

1267 ワード

小文字からなる文字列Sが与えられる.そして、任意の回数の移動を行うことができます.
移動のたびに、最初のK文字の1つ(左側から)を選択し、元の位置から削除し、文字列の最後に配置します.
任意の回数の移動後に持つことができる辞書順の最小文字列を返します.
 
例1:
S = "cba", K = 1
"acb"

     ,        (“c”)     ,      “bac”。
     ,        (“b”)     ,       “acb”。

例2:
S = "baaca", K = 3
"aaabc"
     ,        (“b”)     ,      “aacab”。
     ,        (“c”)     ,       “aaabc”。

 
ヒント:
  • 1 <= K <= S.length <= 1000
  • Sは小文字のみで構成されています.

  •  
    1位dalaoのACの答えを参考にしました(もっと良い答えはないようですか?
    Kが1より大きい場合は直接ソートし、どうせ勝手にドラッグしてもいいです.
    Kが1ならS+Sでずっとサブストリングを切るのが一番小さいです
    class Solution {
    public:
        string orderlyQueue(string S, int K) {
            if(K > 1)
            {
                sort(S.begin(), S.end());
                return S;
            }
            string tmp = S;
            S += S;
            int len = tmp.size();
            
            for(int i = 0; i < len; i++)
            {
                tmp = min(tmp, S.substr(i, len));
            }
            
            return tmp;
        }
    };