题目描述:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
思路:
以空间换时间。遍历一次数组,用一个256大小的hash数组存储下所有字母出现次数(下标是字母的ASCII码),再遍历一次找到第一个次数为1的数输出下标。
大小设为256是因为字母的ASCII最大到255。
使用unordered_map也可以,字符对应出现次数的映射,这里没有必要,用数组就可以完成。
参考代码:
在线测试
AC代码
class Solution {
public:
int FirstNotRepeatingChar(string str) {
if(str.empty())
return -1;
int hash[256]={0};
//unordered_map<char,int> hash;
for(int i=0;i<str.size();i++)
{
hash[str[i]]++;
}
for(int i=0;i<str.size();i++)
{
if(hash[str[i]]==1)
return i;
}
return -1;
}
};