题目描述:
示例:
解题思路:
1.此题要求我们找到仅仅出现一次的字符,并返回其索引,所以我们就可以借助一个数组来统计每一个字符出现的次数。
int count[256]={0};
注意:之所以要给256个空间,是因为在ASCII码表中,所有字符都一个有128个,所以256个空间可以满足每一个字符都可以保证其下标可以保存在数组里。
int count[256]={0}; //范围for统计每一个字符出现的次数 for(auto e:s) { count[e]++; }
所以我们e的值其实就转变成了字母相对于的ASCII值从而对应数组的下标。
2.然后我们开始查找只出现一次的字符,注意:不能直接在count数组中找第一个只出现一次的字符
因为在count中第一个出现一次的字符并不一定是字符串中第一个只出现一次的字符
例如ABcABC,它在count中只出现一次的字符是C。所以我们的循环应在字符串中循环。
for(size_t i=0;i<s.size();++i) { if(count[s[i]]==1) return i; }
如果没有找到则返回-1;
下面是全部代码:
class Solution { public: int firstUniqChar(string s) { //给一个有256个空间的数组 int count[256]={0}; //范围for统计每一个字符出现的次数 for(auto e:s) { count[e]++; } for(size_t i=0;i<s.size();++i) { if(count[s[i]]==1) return i; } return -1; } };