题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
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; }