剑指offer:50-题解 | #第一个只出现一次的字符#

第一个只出现一次的字符

http://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c

题目啊描述

在一个长为 字符串中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -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;
    }
};
全部评论

相关推荐

11-19 18:44
已编辑
成都理工大学 Java
程序员花海:我面试过100+校招生,大厂后端面试不看ACM,竞赛经历含金量低于你有几份大厂实习 这个简历整体来看不错 可以海投
如何写一份好简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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