leetcode 899. 有序队列

╰+攻爆jí腚メ 2023-09-28 18:19 100阅读 0赞

给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个,并把它加到字符串的末尾。

返回 在应用上述步骤的任意数量的移动后,字典上最小的字符串 。

示例 1:

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

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

提示:

1 <= k <= S.length <= 1000
s 只由小写字母组成。

思路:

当k==1时,将原字符串看成一个环,从开头到结尾每次都将第一个字符放在末尾,保存这些字符中的字典序最小的情况,直接模拟。

当k>=2时,经过有限次的操作,一定可以变成升序,因为我们每次在前k个中都可以选择最大的那个放在最后,这样实际操作起来很麻烦,但和sort排好序的结果是一样的,所以直接sort返回即可。

  1. class Solution {
  2. public:
  3. string orderlyQueue(string s, int k) {
  4. if(k>1){
  5. sort(s.begin(),s.end());
  6. return s;
  7. }
  8. string ans=s;
  9. for(int i=0;i<s.size();++i){
  10. s=string{
  11. s.begin()+1,s.end()}+s[0];
  12. ans=min(ans,s);
  13. }
  14. return ans;
  15. }
  16. };

发表评论

表情:
评论列表 (有 0 条评论,100人围观)

还没有评论,来说两句吧...

相关阅读

    相关 leetcode 899. 有序队列

    给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个,并把它加到字符串的末尾。 返回 在应用上述步骤的任意数量的移动后,字典上最小的字符串 。 示

    相关 redis实现有序的消息队列

    redis是什么东西就不多说了,网上文章一搜一大堆。 首先来说一下我要实现的功能: 类似一个消息中转站吧,如果有人要发送消息,先将消息发到我这里来,然后我这边进行转发,为的