-
题目描述:
-
在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符。
-
输入:
-
输入有多组数据
每一组输入一个字符串。
-
输出:
-
输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1。
-
样例输入:
-
ABACCDEFF AA
-
样例输出:
-
1 -1
AC代码:
#include<stdio.h>
#include<string.h>
int main() {
int i;
char s[10001];
while(scanf("%s", s) != EOF) {
int len = strlen(s);
int map[26] = {0}; //用哈希映射
for(i = 0; i < len; i++) {
map[s[i]-'A']++;//通过对字符减'A'把下标转换成int型
//printf("i:%d, map[%d]:%d\n", i, s[i]-'A',map[s[i]-'A']);
}
//从头再扫描一遍字符串,就能保证找到第一个只出现一次的字符(如果有的话)
for(i = 0; i < len; i++) {
if(map[s[i]-'A'] == 1) {
break;
}
}
if(i != len) {
printf("%d\n", i);
}
else {
printf("%d\n", -1);
}
}
return 0;
}
/**************************************************************
Problem: 1283
User: wusuopuBUPT
Language: C
Result: Accepted
Time:20 ms
Memory:912 kb
****************************************************************/