387. 字符串中的第一个唯一字符 - 力扣(LeetCode) (leetcode-cn.com)
1、计数法,由于一共只有26个字母,所以我们可以声明一个大小为26的int数组去记录字符串s中的各个字符出现的次数。
记录完后遍历整个用于记录的数组cnt,如果该字符出现次数为1,则去判断它在字符串s中的位置,如果该位置小于记录的最小位置(用一个signindex去记录最小的索引,其初始值为s的大小,因为索引最大为s的大小减一),则将该索引赋值给signindex。
最后判断一下signindex是否等于初始值,如果相等则代表没有唯一字符,不等则返回signindex。
class Solution {
public:
int firstUniqChar(string s) {
int thesize=s.size();
int cnt[26]={0};
int signindex=thesize;
for(int i=0;i<thesize;++i) ++cnt[s[i]-97];
for(int i=0;i<26;++i)
{
if(cnt[i]==1)
{
for(int j=0;j<thesize;++j)
if(s[j]==i+97)
{
if(j<signindex) signindex=j;
break;
}
}
}
if(signindex==thesize) return -1;
else return signindex;
}
};