Given a string, find the first non-repeating character in it and return it's index. If it doesn't exist, return -1.
Examples:
s = "leetcode" return 0. s = "loveleetcode", return 2.
Note: You may assume the string contain only lowercase letters.
Subscribe to see which companies asked this question.
思路:
坑比较多 多读题,不存在返回-1;;;
边界:size =0 返回-1
size = 1 返回0
使用map,便利后存入,未出现calue存index,出现calve变为size
在使用vector<pair<char,int>>进行排序,去除最小的~
代码:
class Solution {
public:
static bool cmp(pair<char, int>&a, pair<char, int>&b)
{
return a.second < b.second;
}
int firstUniqChar(string s) {
int size = s.size();
cout <<"size:"<<size;
if(size == 0)
return -1;
if(size == 1)
return 0;
map <char, int> a;
map <char, int> :: iterator it;
for (int i = 0; i < size ; i ++)
{
it = a.find(s[i]);
if(it == a.end())
{
a[s[i]] = i;
}
else
{
a[s[i]] = size;
}
}
vector<pair<char, int>> res;
for (it = a.begin(); it != a.end(); it ++)
{
res.push_back(pair<char, int>(it->first, it->second));
//cout << it->first << it->second<<endl;
}
sort(res.begin(), res.end(), cmp);
if(res[0].second == size)
return -1;
return res[0].second;
}
};
网上说:设置一个26数组,出现+1,统计词频为1的。。。