题解 | #删除字符串中出现次数最少的字符#

删除字符串中出现次数最少的字符

https://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9

#include <stdio.h>
#include <string.h>

int main() {
    char str[20];
    scanf("%s\n",str);
    int map[26]={0}, mapmin[26]={0};
    int len=strlen(str), i,j,k;
    int indexmin=0;
    for (i=0; i<len; i++) {
        map[(int)(str[i]-'a')]++;
    }
    
    /* 該步驟意在找到第一個出現的字母,避免index一開始就為0而map「index」也為0的尷尬情況(這樣會導致map[index]就係0、最少的,即係永遠不會被替換到,但0本身意味着這個字母根本就冇出現) */
    while (map[indexmin]==0) {
        indexmin++;
    }
    /* 搵到最少出現字符的index */
    for (i=0; i<26; i++) {
        if (map[i]==0) continue;
        if (map[indexmin]>map[i]) indexmin=i;
    }
    /* 搵到所有出現次數同最少次數相同的字符的index */
    for (i=0; i<26; i++) {
        if (map[i]==map[indexmin]) mapmin[i]++;
    }
    /* 所有最少次數的index對應的字符都刪除,後面嘅字符向上填充 */
    for (i=0; i<len; i++) {
        if (mapmin[(int)(str[i]-'a')]==1) {
            for (j=i; j<len; j++) {
                if (j==len-1) str[j]='\0'; 
                else {
                    str[j]=str[j+1];
                }
            }
            len--;
            i--;
        }
    }
    printf("%s\n",str);
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-28 12:15
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务