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

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

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

全部评论

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
点赞 评论 收藏
分享
06-20 14:27
中山大学 C++
rt,day3就开始接需求
星际探神:你就想 你是水货他们都没面出来 他们也水 管他呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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