九度OJ 1283:第一个只出现一次的字符 (计数)
- 题目描述:
-
在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符。
- 输入:
-
输入有多组数据
每一组输入一个字符串。
- 输出:
-
输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1。
- 样例输入:
-
ABACCDEFF AA
- 样例输出:
-
1 -1
思路:
对所有大写字母进行计数即可。
只循环一遍的解法我没想出来,我的做法是循环两遍,第一遍计数,第二遍找第一个只出现一次的字符。
代码:
#include <stdio.h> #include <string.h> #define M 10000 #define N 26 int main() { int i, min; char s[M+1]; int c[N], index[N]; while(scanf("%s", s) != EOF) { for (i=0; i<N; i++) c[i] = 0; for (i=0; i<strlen(s); i++) { if ( c[s[i]-'A']++ == 0) index[s[i]-'A'] = i; } min = M; for (i=0; i<N; i++) { if (c[i] == 1 && index[i] < min) min = index[i]; } if (min == M) printf("%d\n", -1); else printf("%d\n", min); } return 0; } /************************************************************** Problem: 1283 User: liangrx06 Language: C Result: Accepted Time:10 ms Memory:912 kb ****************************************************************/
编程算法爱好者。