題目描述
在一個字符串(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;
}
};