剑指offer系列——34.第一个只出现一次的字符
Q:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
T:
1.第一反应肯定是map。注意,map插入后不会按照插入顺序排放,是会内置排序的。
int FirstNotRepeatingChar(string str) {
if (str.empty())
return -1;
map<char, int> mp;
for (int i = 0; i < str.size(); i++) {
if (mp.find(str[i]) == mp.end())
mp.insert(make_pair(str[i], 1));
else
mp[str[i]]++;
}
for (int i = 0; i < str.size(); i++) {
if (mp[str[i]] == 1)
return i;
}
return -1;
}
2.类似创建一个hash数组
int FirstNotRepeatingChar(string str) {
int hash[256]={0};
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;
}
3.python的内置count函数
def FirstNotRepeatingChar(self, s):
return s.index(list(filter(lambda c:s.count(c)==1,s))[0]) if s else -1