LeetCode 899. Orderly Queue

Posted blogxjc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 899. Orderly Queue相关的知识,希望对你有一定的参考价值。

899. Orderly Queue(有序队列)

 

题目:

  

  给出了一个由小写字母组成的字符串 S。然后,我们可以进行任意次数的移动

  在每次移动中,我们选择前 K 个字母中的一个(从左侧开始),将其从原位置移除,并放置在字符串的末尾。

  返回我们在任意次数的移动之后可以拥有的按字典顺序排列的最小字符串。

 

  示例 1:

  输入:S = "cba", K = 1
  输出:"acb"
  解释:
  在第一步中,我们将第一个字符(“c”)移动到最后,获得字符串 “bac”。
  在第二步中,我们将第一个字符(“b”)移动到最后,获得最终结果 “acb”。

  示例 2:

  输入:S = "baaca", K = 3
  输出:"aaabc"
  解释:
  在第一步中,我们将第一个字符(“b”)移动到最后,获得字符串 “aacab”。
  在第二步中,我们将第三个字符(“c”)移动到最后,获得最终结果 “aaabc”。

 

  提示:

    1.   1 <= K <= S.length <= 1000
    2.   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     }
View Code

 

以上是关于LeetCode 899. Orderly Queue的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 117

聊聊rocketmq的ConsumeMode.ORDERLY

[leetcode]Moving Average from Data Stream

[leetcode] Weekly Contest 170 Summary

从 NDBCLUSTER 收到临时错误 899“Rowid 已分配”

LeetCode八月每日一题题解(个人记录打卡)