题目描述:
描述
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。
输入
一个字符串,长度小于100000。
输出
输出第一个仅出现一次的字符,若没有则输出no。
样例输入
abcabd
样例输出
c
我的代码:
#include <stdio.h>
#include <string.h>
int main() {
char a[100000];
gets(a);
int i;
int k;
int count[100000];
for (k = 0; k < strlen(a); k++) {
for (i = 0; i < strlen(a); i++) {
if (a[k] == a[i]) {
count[k]++;
}
}
if (count[k] == 1) {
break;
}
}
if (k == strlen(a)) {
printf("no");
} else {
printf("%c", a[k]);
}
return 0;
}
我的整个思路最开始出现了一些问题。我是想做一个lowercase的表,然后找出只出现一个的字母,然后打印出第一个为1的项目。但这明显有一个很大的问题,那就是这个东西的顺序是按字母表来的,而不是按字符串的顺序来的。所以我需要改变我的算法。
我现在的算法是认识一个字母,然后找这个字母。如果遍历完了结果发现这个字母只出现过一次,我就打印这个字母。要是所有都找完了还没有找到只出现一个的字母,我就打印no。