-
题目描述:
-
在一个字符串(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
****************************************************************/