题目链接:
第一个只出现一次的字符_牛客题霸_牛客网 (nowcoder.com)
题目简介:
描述
在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
数据范围: 0≤n≤10000,且字符串只有字母组成。
要求:空间复杂度 O(n),时间复杂度 O(n)
题目解法:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return int整型
*/
int FirstNotRepeatingChar(char* str ) {
// write code here
char *cur = str;
int letters[26*2] = {0}; //声明数组用来存储字母出现的次数,按照a-z A-Z
//先存储str的字符的出现次数
for(int i = 0; cur[i] != '\0'; i++){
if(cur[i] >= 'a' && cur[i] <= 'z'){
letters[cur[i] - 'a']++;
}else{
letters[cur[i] - 'A' + 26]++;
}
}
//str从头检索letters,如果为1则表示第一次出现次数为1的字母,返回索引
for(int i = 0; cur[i] != '\0'; i++){
if(cur[i] >= 'a' && cur[i] <= 'z'){
if(letters[cur[i] - 'a'] == 1)
return i;
}else{
if(letters[cur[i] - 'A' + 26] == 1)
return i;
}
}
return -1;
}