在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置
解法1:使用数组,int hash[256];
这题我竟然在想其他的歪点子,没想到第二次直接从数组0位置开始遍历(好蠢)(而不是哈希容器),不要动不动就想遍历哈希容器。
class Solution {
public:
int FirstNotRepeatingChar(string str) {
if(str.empty()) return -1;
vector<int> hash(256,0);
for (auto ch:str) ++hash[ch-'0'];
for (int i = 0; i < str.length(); ++i)
{
if(hash[str[i]-'0']==1)
return i;
}
return 0; //非常必须.
}
};
解法二:使用unordered_map<char,int> 默认初始化为0;
注意不要在条件语句中return ,一定要有主return,不要在条件语句中return
class Solution {
public:
int FirstNotRepeatingChar(string str) {
if(str.empty()) return -1;
unordered_map<char,int> hash;
for (auto ch:str) ++hash[ch];
for (int i = 0; i < str.length(); ++i)
{
if(hash[str[i]]==1)
return i;
}
return 0;//非常必须。
}
};