• 1625. 执行操作后字典序最小的字符串-枚举


    1625. 执行操作后字典序最小的字符串-枚举

    给你一个字符串 s 以及两个整数 a 和 b 。其中,字符串 s 的长度为偶数,且仅由数字 0 到 9 组成。

    你可以在 s 上按任意顺序多次执行下面两个操作之一:

    累加:将  a 加到 s 中所有下标为奇数的元素上(下标从 0 开始)。数字一旦超过 9 就会变成 0,如此循环往复。例如,s = "3456" 且 a = 5,则执行此操作后 s 变成 "3951"。
    轮转:将 s 向右轮转 b 位。例如,s = "3456" 且 b = 1,则执行此操作后 s 变成 "6345"。
    
    • 1
    • 2

    请你返回在 s 上执行上述操作任意次后可以得到的 字典序最小 的字符串。

    如果两个字符串长度相同,那么字符串 a 字典序比字符串 b 小可以这样定义:在 a 和 b 出现不同的第一个位置上,字符串 a 中的字符出现在字母表中的时间早于 b 中的对应字符。例如,"0158” 字典序比 “0190” 小,因为不同的第一个位置是在第三个字符,显然 ‘5’ 出现在 ‘9’ 之前。

    示例 1:

    输入:s = “5525”, a = 9, b = 2
    输出:“2050”
    解释:执行操作如下:
    初态:“5525”
    轮转:“2555”
    累加:“2454”
    累加:“2353”
    轮转:“5323”
    累加:“5222”
    累加:“5121”
    轮转:“2151”
    累加:"2050"​​​​​​​​​​​​
    无法获得字典序小于 “2050” 的字符串。

    示例 2:

    输入:s = “74”, a = 5, b = 1
    输出:“24”
    解释:执行操作如下:
    初态:“74”
    轮转:“47”
    累加:“42”
    轮转:"24"​​​​​​​​​​​​
    无法获得字典序小于 “24” 的字符串。

    示例 3:

    输入:s = “0011”, a = 4, b = 2
    输出:“0011”
    解释:无法获得字典序小于 “0011” 的字符串。

    示例 4:

    输入:s = “43987654”, a = 7, b = 3
    输出:“00553311”

    解题代码如下:

    char *findLexSmallestString(char *s, int a, int b)
    {
        int len = strlen(s);
        char *ans = (char *)malloc((len + 1) * sizeof(char));
        char *re = (char *)malloc((len + 1) * sizeof(char));
       
        strcpy(ans, s);
        strcpy(re, s);
       
      
        int p=1;
    
        // 枚举起始字符位置
        for (int i = 0; i<len; i ++) {
           
            
            
    
               for(int k=0;k<10;k++){
                    for(int j=1;j<len;j=j+2){
                         re[j]=(re[j]-'0'+a)%10+'0';  
                            }
               
                    if(strcmp(ans,re)>0){
                        strcpy(ans,re);
                    }
               
    
    
               
                if (b % 2) {
                    for (int jj = 0; jj < 10; jj ++) {
                        for (int kk = 0; kk < len; kk += 2) {
                            re[kk] = ((re[kk] - '0' + a) % 10) + '0';
                        }
                        if (strcmp(ans, re) > 0) {
                            strcpy(ans, re);
                        }
                    }
                }
            }
    
              for(int i=0;i<len;i++){
                          re[i]=s[(i+b*p)%len];
                 }
                 p++;
        }
        free(re);
       
        return ans;
    }
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
  • 相关阅读:
    2022年全球及中国280Ah磷酸铁锂铝壳电芯行业头部企业市场占有率及排名调研报告
    算法学习-单调双端队列
    【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)
    harbor私有仓库部署
    /system/bin/sh: disable-verity: not found
    时隔一年后,35岁生日,恰逢720
    【C刷题】day7
    11.23二叉树
    辣椒碱人血清白蛋白纳米粒Capsaicin-HRP-HSA|辣椒素卵清白蛋白纳米粒Vanillylnonanamide-OVA|齐岳
    算法 反转自符串-(双指针)
  • 原文地址:https://blog.csdn.net/weixin_43327597/article/details/127831082