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

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

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;
}

全部评论

相关推荐

10-28 11:44
已编辑
地平线_HR
地平线上市啦,市值600亿左右!大家有offer的完全可以考虑。目前市场份额国内双第一,国内自动驾驶认可度非常高。欢迎大家的加入!!!!!!!!
我已成为0offer的糕手:别卡学历,是我不想投?秋招第一份感谢信就你家我也没办法啊
投递地平线等公司10个岗位 >
点赞 评论 收藏
分享
牛客717484937号:双飞硕没实习挺要命的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务