第一个只出现一次的字符
在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置
题目可能表述漏掉了,由大小写组成。
1、hash初识化-1。
2、扫描,对-1值进行索引赋值,对非负值赋值-2(表示已经出现第二次)。
3、对所有非负值取最小的索引。
class Solution {
public:
int FirstNotRepeatingChar(string str) {
if(str.empty()) return -1;
int hash[58],len=str.length();
for(int i=0;i<58;++i){
hash[i]=-1;
}
for(int i=0;i<len;++i){
int pos=str[i]-65;//是小写!!!
if(hash[pos]==-1){
hash[pos]=i;
}
else if(hash[pos]>=0){
hash[pos]=-2;
}
}
int i=0;
for(;i<58&&hash[i]<0;++i);
int minPos=hash[i];
for(++i;i<58;++i){
if(hash[i]>=0&&hash[i]<minPos){
minPos=hash[i];
}
}
return minPos;
}
};