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