题目描述:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
输入:
“google”
输出:
4
解法1:HashMap
class Solution {
public:
int FirstNotRepeatingChar(string str) {
// unordered_map<class _Key, class _Tp>
unordered_map<char,int>mp;
for(int i=0;i<str.size();++i){
mp[str[i]]+=1;
}
for(int i=0;i<str.size();++i){
if(mp[str[i]]==1) return i;//因为加加的原因,倒是如何哈希map后面只有一个元素,说明这个元素是唯一的,具体可以参考连地址法
//如果map不唯一,那么表示一个位置上
//保存了多个相同的元素,题目的要求是要找唯一的元素,那么我们九八map中只存放了一个元素的位置输出即可。
}
return -1;
}
};
解法2:
class Solution {
public:
//A=65,Z=90;a=97,z=122; ASCII表
int FirstNotRepeatingChar(string str) {
vector<int>result(58,0);//动态向量 26+26 大小写之和有58个字母
for(int i=0;i<str.size();++i){
//result[str[i]-'A']+=1;
result[str[i]-'A']=result[str[i]-'A']+1;
//str[i]-'A'所代表的字母在大写字母表的序号
//str数组元素减去A的ASCII 字符转化成整形
//g
}
for(int i=0;i<str.size();++i){
if(result[str[i]-'A']==1)return i;
}
return -1;
}
};