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;

    }

};