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 }