题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
用一个大小为52的数组记录每个字母出现的次数,然后在用一遍遍历,找出第一个只出现一次的字符。复杂度O(n)
class Solution {
public:
int FirstNotRepeatingChar(string str) {
// 大小写共52个字母
vector<int> map_table(52,0);
for (int i=0;i<str.length();i++) {
if((int)str[i]>='a') {
map_table[(int)str[i]-'a'+26]++;
} else {
map_table[(int)str[i]-'A']++;
}
}
for (int i = 0; i < str.length(); i++)
{
int index=0;
if((int)str[i]>='a') {
index=(int)str[i]-'a'+26;
} else {
index=(int)str[i]-'A';
}
if(map_table[index]==1) {
return i;
}
}
return -1;
}
};