题解 | #小红的字符串构造#

小红的字符串构造

https://www.nowcoder.com/practice/3e4b4dabc2e444e384c3ae62ac7dd84e

#include <stdio.h>
#include <string.h>
#include <stdbool.h>
int main() {
    char s[200002];
    while (scanf("%s", s) != EOF) {
        char t[200002];
        bool c[26] = {0};
        int count = 0;
        int cindex = -1;
        int lens = strlen(s);
        for (int i = 0; i < lens; i++) {
            if (c[s[i] - 'a'] == false) {
                c[s[i] - 'a'] = true;
                // printf("检查到字母%c\n", s[i]);
                count++;
            }
            if (count == 26) break;
        }
        if (count == 1) {
            printf("-1\n");
            return 0;
        }
        bool used = true;
        for (int i = 0; i < lens; i++) {
            if (used == true) {
                for (int j = cindex + 1; j < 26; j++) {
                    // printf("开始查找26个字母中还未被使用过的字母\n");
                    // printf("目前找到第%d个字母", j);
                    if (c[j] == true) {
                        // printf("字母%c未被使用,cindex变为%d\n", j + 'a', j);
                        cindex = j;
                        used = false;
                        break;
                    }
                }
            }
            if (s[i] != cindex + 'a') {
                t[i] = cindex + 'a';
                used = true;
            } else {
                for(int j = 0; j < 26; j++) {
                    if(c[j] == true && s[i] != j + 'a') {
                        t[i] = j + 'a';
                        break;
                    }
                }
            }
        }
        t[lens] = '\0';
        printf("%s\n", t);
    }
    
    return 0;
}

全部评论

相关推荐

09-29 11:19
门头沟学院 Java
点赞 评论 收藏
分享
重生2012之我是java程序员:换个稍微正式点的照片吧
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务