面试题50-1:字符串中第一个只出现一次的字符

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

#include<unordered_map>
class Solution {
public:    
    int FirstNotRepeatingChar(string str) {
        if (str.empty())
            return -1;
        unordered_map<char, int> strMap;
        /*
        //构造strMap方法1:这是比较朴实的方法,一步步来。
        for (int i = 0; i < str.length(); ++i)
        {
            int ch = str[i];
            //若strMap为空或者其中没有这个字符,则添加进去,key为字符,value初始化为1
            if (strMap.empty() || strMap.find(ch) == strMap.end())
            {
                strMap.insert({ ch,1 });
            }
            else
            {
                strMap[ch] += 1;
            }
        }
        */
        //这样构造strMap显得高大上多了,其实不用特地把strMap中若之前没有ch拿出来初始化为1,
        //因为strMap定义的时候,插入一个key值,对应int型的value就被初始化为0
        for(auto ch:str)
        {
            ++strMap[ch];
        }
    //由于要返回字符在原字符串的位置,所以直接以原字符串为依据遍历。
        for (int i = 0; i < str.size(); ++i)
        {
            if (strMap[str[i]] == 1)
                return i;
        }
        return -1;
    }
};
全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务