剑指offer-刷题笔记-简单题-JZ50 第一个只出现一次的字符
关键在于将每一个字符出现的次数统计出来,然后按照条件返回即可,注意字符是不变的,次数不断改变,所以用字符做地址或者说索引key,利用map存储,map的key是不重复的。map的相关操作
版本1 - 建立map存储
class Solution {
public:
int FirstNotRepeatingChar(string str) {
int index;
map<char,int> flag;
for(int i = 0;i < str.length();i++)
{
flag.insert(pair < char,int > (str[i],flag[str[i]]++));
}
for(int i = 0;i < str.length();i++)
{
if(flag[str[i]] == 1)
{
index = i;
break;
}else{
index = -1;
}
}
if(index == -1)
{
return -1;
}else{
return index;
}
}
};
版本2 - 利用bitset
class Solution {
public:
int FirstNotRepeatingChar(string str) {
bitset<128> b1, b2;
for (const char ch : str) {
if (!b1[ch] && !b2[ch]) {
b1[ch] = 1;
}
else if (b1[ch] && !b2[ch]) {
b2[ch] = 1;
}
}
for (int i=0; i<str.length(); ++i) {
if (b1[str[i]] && !b2[str[i]]) {
return i;
}
}
return -1;
}
};