class Solution {
public:
struct strin{
int count; //count用于记录当前字符出现的总次数
int time; //time用于记录当前字符第一次出现的时间,-1代表未出现
};
int FirstNotRepeatingChar(string str) {
char b[10000];
strcpy(b,str.c_str());
int t=0; //t用于记录时间
struct strin record[58]; //大写字母A-Z和小写字母a-z以及中间的6个特殊符号
for(int i=0;i<58;i++){ //初始化结构体的count和time
record[i].count=0;
record[i].time=-1;
}
for(int i=0;b[i]!='\0';i++){ //字符-65是方便的转换int型,省去了记录字符对应记录的麻烦
record[b[i]-65].count++; //当前字符的出现次数+1
if(record[b[i]-65].time==-1){
record[b[i]-65].time=t; //如果当前字符是第一次出现,记录其时间
}
t++; //时间+1
}//目的只是找出出现一次的字符的出现时间,其实跟记录不记录是哪个字符没啥关系,如果要输出字符,直接下标+65即可
int minti=10001; //minti用于记录要输出的最早时间
for(int i=0;i<58;i++){
if(record[i].count==1){
if(record[i].time<minti&&record[i].time!=-1){
minti=record[i].time;
}
}
}
if(minti==10001) minti=-1; //如果没有符合条件的字符,输出-1
return minti;
}
};