题目啊描述

在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)

示例1 输入: "google" 返回值:4


题解1:使用unordered_map<char,ing>,其中key是字符,value是字符对应的个数


class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        //题解1:暴力法
        //两次遍历,第一次将各个字符存入unordered_map<char,int>中
        //第二次遍历寻找value位1的key
        map<char, int> m;
      //第一次循环,将所有字符和对应字符个数存入map中
        for(int i =0;i<str.size();i++){
            if(m.find(str[i]) ==m.end())
                m.insert(pair<char, int>(str[i],1));//字符第一次出现,个数置为1
          		//m.insert(make_pair(str[i],1));
            else
                (*m.find(str[i])).second++;//重复出现,个数累加
        }
      //第二次循环,找到个数位1的第一个字符
        for(int i =0;i<str.size();i++){
            if(m[str[i]] == 1)
                return i;
        }
        return -1;
    }
};

题解2:


class Solution {
public:
    int FirstNotRepeatingChar(string str) {
        unordered_map<char,bool> m;
        for(int i =0;i<str.size();i++){
            if(m.find(str[i]) ==m.end())
                m.insert(make_pair(str[i], true));//字符第一次出现,value设置位true
            else
                (*m.find(str[i])).second = false;//重复出现,value设置位false
        }
        for(int i =0;i<str.size();i++){
            if(m[str[i]] == true)
                return i;
        }
        return -1;
    }
};