• 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
  • 相关阅读:
    Web开发(二)HTML
    Web开发(一)基础
    Python基础(十二)并发编程02
    Python基础(十一)并发编程01
    Python基础(十)socket编程
    Python基础(九)异常
    计算机基础
    Python基础(八)面向对象02
    jmeter使用正则表达式提取数据
    jmeter+ant 实现自动化接口测试环境配置
  • 原文地址:https://www.cnblogs.com/blogxjc/p/10936318.html
Copyright © 2020-2023  润新知