AcWing 周赛12 3804. 构造字符串(贪心 构造)

简介: AcWing 周赛12 3804. 构造字符串(贪心 构造)

原题链接

思路:

分类讨论,贪心考虑

当k > n时,比较简单的一种情况,只需要将s复制过来后在末尾补字典序最小的字母

当k < = n时,倒着考虑。如果这一位能够被替换为大的,就替换为比当前位大的,前面的都保持原序列;反之,就在这位放最小的,继续向前找;

代码:

const int maxn=2e5+100;
map<char,int>mp;
int get_nex(int x){
  for(int i=x+1;i<26;i++){
    char t=char(i+'a');
    if(mp[t]) return i;
  }
  return -1;
}
int main(){
  int _=read;
  while(_--){
    int n=read,k=read;
    string s;cin>>s;
    mp.clear();
    char minn='z';
    for(int i=0;s[i];i++) mp[s[i]]++,minn=min(minn,s[i]);
    //for(auto t:mp) cout<<t.first<<" "<<t.second<<endl;
    if(k>n){
      cout<<s;
      for(int i=0;i<k-n;i++) cout<<minn;
      puts("");
    }
    else{
      string t;
      for(int i=k-1;k>=0;i--){
        //cout<<s[i]-'a'<<endl;
        int tmp=get_nex(s[i]-'a');
        //cout<<tmp<<endl;
        if(tmp!=-1){
          t=char(tmp+'a')+t;
          t=s.substr(0,i)+t;
          break;
        }
        t=minn+t;
      }
      cout<<t<<endl;
    }
  }
  return 0;
}
目录
相关文章
|
19天前
|
算法 测试技术 C语言
leecode算法题之数组
leecode算法题之数组
|
12月前
子串问题动态规划编程题集合(leetcode)
子串问题动态规划编程题集合(leetcode)
|
边缘计算 算法 测试技术
LeetCode 周赛 343(2023/04/30)结合「下一个排列」的贪心构造问题
今天是五一假期的第二天,打周赛的人数比前一天的双周赛多了,难道大家都只玩一天吗?这场周赛是 LeetCode 第 343 场单周赛,如果不考虑第一题摆烂的翻译,整体题目质量还是很不错哒。
70 0
|
数据建模
【每日一题Day66】LC1754构造字典序最大的合并字符串 | 贪心 双指针模拟
思路:双指针遍历两个字符串,贪心比较字符的字典顺序,并添加至结果集
64 0
【每日一题Day66】LC1754构造字典序最大的合并字符串 | 贪心 双指针模拟
|
C++ Python
有趣的数学推导题目-leetcode462. 最少移动次数使数组元素相等 II
有趣的数学推导题目-leetcode462. 最少移动次数使数组元素相等 II
|
机器学习/深度学习 算法 C++
(C/C++)STL函数(3)二分算法题以及二分模板 和(蓝桥杯)递推与递归题目及解法(ACwing)
(C/C++)STL函数(3)二分算法题以及二分模板 和(蓝桥杯)递推与递归题目及解法(ACwing)
(C/C++)STL函数(3)二分算法题以及二分模板 和(蓝桥杯)递推与递归题目及解法(ACwing)
|
算法
【Day19】LeetCode算法刷题(附带解题思路、代码注释详细) 【777. 在LR字符串中交换相邻字符】 【54. 螺旋矩阵】
学习了解附带解题思路、代码注释详细) 【777. 在LR字符串中交换相邻字符】 【54. 螺旋矩阵】。
89 0
【Day19】LeetCode算法刷题(附带解题思路、代码注释详细) 【777. 在LR字符串中交换相邻字符】 【54. 螺旋矩阵】
|
算法
[leetcode] 最长公共前缀 简单水题模拟
根据数据范围来说,我们可以枚举最长公共前缀的长度,长度的范围是[0, minLen(strs)] 然后一边枚举长度一边判断是否成功即可 还有一种就是将判断是否满足公共前缀写成check函数,然后用二分的方法来得到最长的前缀长度 题目很水 Code:
91 0
[leetcode] 最长公共前缀 简单水题模拟
|
算法
每日一题算法,返回所有不重复的全排列
今天我们继续研究算法,还是那句话,程序中最伤脑筋的就算法,写算法不比CURD,都所有情况都考虑进去才行,那么接下来我们再来看看这道题怎么解决。
153 0
每日一题算法,返回所有不重复的全排列
|
存储 Python
力扣每日一题:7.整数反转 一题三解,带你逐层深入
力扣每日一题:7.整数反转 一题三解,带你逐层深入
78 0