387. First Unique Character in a String
这题要求找出第一个出现的Unique字符。
因为只会出现[a-z]:所以我把[a-z]的字母定为三个状态:未出现,出现一次,出现多次。
未出现是-1,出现一次是它的下标。出现多次是字符串的长度。
遍历一遍字符串即可确定[a-z]每个字母的状态。
最后找出所有字母中是出现一次状态的:值最小的。
Code
class Solution {
public:
int firstUniqChar(string s) {
int alp[26],len = s.size();
fill(begin(alp),end(alp),-1);
for(int i=0;i<len;i++){
if(alp[s[i]-'a'] ==-1){
alp[s[i]-'a']=i;
}
else if(alp[s[i]-'a']!=len){ //alp[s[i]-'a']!=len mean first repeat,alp[s[i]-'a']==len mean repeats many times
alp[s[i]-'a']=len;
}
}
int min=len;
bool flag=false; //have no repeat ?
for(int i=0;i<26;i++){
if(alp[i]!=len && alp[i]!=-1){ //No repeat and have apperance
if(min >alp[i])
min = alp[i];
flag = true;
}
}
return flag?min:-1;
}
};