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;
}
目录
相关文章
|
数据建模
【每日一题Day66】LC1754构造字典序最大的合并字符串 | 贪心 双指针模拟
思路:双指针遍历两个字符串,贪心比较字符的字典顺序,并添加至结果集
85 0
【每日一题Day66】LC1754构造字典序最大的合并字符串 | 贪心 双指针模拟
|
8月前
|
算法 索引
力扣经典150题第二十六题:判断子序列
力扣经典150题第二十六题:判断子序列
37 0
|
算法
经典算法面试题目-判断两个字符串是否是变位词(1.4)
经典算法面试题目-判断两个字符串是否是变位词(1.4)
253 0
|
9月前
【错题集-编程题】重排字符串(贪心 + 构造)
【错题集-编程题】重排字符串(贪心 + 构造)
|
边缘计算 算法 测试技术
LeetCode 周赛 343(2023/04/30)结合「下一个排列」的贪心构造问题
今天是五一假期的第二天,打周赛的人数比前一天的双周赛多了,难道大家都只玩一天吗?这场周赛是 LeetCode 第 343 场单周赛,如果不考虑第一题摆烂的翻译,整体题目质量还是很不错哒。
104 0
由遍历序列构造二叉树--王道
前序遍历 + 中序遍历序列 后序+中序遍历序列 层序遍历+中序遍历序列
307 0
由遍历序列构造二叉树--王道
|
算法 前端开发 搜索推荐
|
算法
经典算法面试题目-判断一个字符串中的字符是否唯一(1.1)
经典算法面试题目-判断一个字符串中的字符是否唯一(1.1)
158 0
|
8月前
|
算法
力扣每日一题 6/16 字符串 + 随机一题 动态规划/数学
力扣每日一题 6/16 字符串 + 随机一题 动态规划/数学
62 0

热门文章

最新文章