有序队列在 C++ 中


假设出现字符串 S。S 中的所有字母均为小写。然后,可以执行任意多次移动。

在此,在每次移动中,我们选择前 K 个字母中的一个,将其删除,并将其放在字符串的末尾。我们必须找到任意多次移动后可能获得的按字典序最小的字符串。

因此,如果输入类似于 "cabaa" 并且 K = 3,则输出将为 "aaabc"

要解决此问题,我们将遵循以下步骤 -

  • 如果 K > 1,则 -

    • 对数组 S 进行排序

    • 返回 S

  • ret := S

  • n := S 的大小

  • 对于初始化 i := 1,当 i < n,更新(使 i 增加 1),执行 -

    • S := 裁切 S 的第一个字符并在结尾处将其添加到 S 中

    • 如果 S < ret,则 -

      • ret = S

  • 返回 ret

让我们看看以下实现以获得更好的理解 -

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string orderlyQueue(string S, int K) {
      if(K > 1){
         sort(S.begin(), S.end());
         return S;
      }
      string ret = S;
      int n = S.size();
      for(int i = 1; i < n; i++){
         S = S.substr(1) + S.substr(0, 1);
         if(S < ret) ret = S;
      }
      return ret;
   }
};
main(){
   Solution ob;
   cout << (ob.orderlyQueue("cabaa", 3));
}

输入

"cabaa", 3

输出

aaabc

更新时间: 2020 年 6 月 4 日

175 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.