899. Orderly Queue(有序隊列)後端
題目:數組
給出了一個由小寫字母組成的字符串 S
。而後,咱們能夠進行任意次數的移動。app
在每次移動中,咱們選擇前 K
個字母中的一個(從左側開始),將其從原位置移除,並放置在字符串的末尾。ide
返回咱們在任意次數的移動以後能夠擁有的按字典順序排列的最小字符串。ui
示例 1:spa
輸入:S = "cba", K = 1 輸出:"acb" 解釋: 在第一步中,咱們將第一個字符(「c」)移動到最後,得到字符串 「bac」。 在第二步中,咱們將第一個字符(「b」)移動到最後,得到最終結果 「acb」。
示例 2:code
輸入:S = "baaca", K = 3 輸出:"aaabc" 解釋: 在第一步中,咱們將第一個字符(「b」)移動到最後,得到字符串 「aacab」。 在第二步中,咱們將第三個字符(「c」)移動到最後,得到最終結果 「aaabc」。
提示:blog
-
1 <= K <= S.length <= 1000
S
只由小寫字母組成。
思路:排序
這題的設定其實有點迷,當K==1時,就表明先後次序(相對位置)並無改變,只是在開頭的能夠移到後端。當K!=1時,就表明能夠隨意組合,直接計算字典最小的序列便可。隊列
直接分類討論,=1時,新建S=S+S,從前日後取len位比較便可;!=1時,拆爲數組,排序,組合便可。
代碼:


1 public static String orderlyQueue(String S, int K) 2 { 3 int len = S.length(); 4 5 if(K==1) 6 { 7 String word = S; 8 S = S + S; 9 for(int i = 0;i < len;i++) 10 { 11 if(word.compareTo(S.substring(i,i+len))>0) 12 word = S.substring(i,i+len); 13 } 14 return word; 15 } 16 else 17 { 18 char [] word = S.toCharArray(); 19 Arrays.sort(word); 20 StringBuilder sb=new StringBuilder(); 21 for(int i=0;i<S.length();i++) 22 sb.append(word[i]); 23 return sb.toString(); 24 } 25 }