zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    linux vim编辑
    jQuery Ajax 操作函数
    导出excel表功能
    jquery 分页控件功能
    数据绑定后细节处理
    删除数据库日志文件的操作语句
    SqlHelper.cs
    c#中$.ajax的使用
    SpringBoot 获取微信小程序openid
    Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器
  • 原文地址:https://www.cnblogs.com/blogxjc/p/10936318.html
Copyright © 2011-2022 走看看