美文网首页
面试题50(1):第一次只出现一次的字符

面试题50(1):第一次只出现一次的字符

作者: 潘雪雯 | 来源:发表于2020-05-06 17:40 被阅读0次

    题目

    字符串中第一次只出现一次的字符
    例如:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff”,则输出‘b’

    解题思路

    统计每个字符出现的次数就好了。
    1)用容器存放每个字符出现的次数,即可以将一个字符映射称一个数字。拥有哈希表的容器非map不可

    1. 构建一个类似哈希表的数组
    2. 注意字符是一个长度为8的数据类型,共有256种可能。故应创建一个长度为256的数组,每个字母根据其ASCII码值作为数组的下标对应数组的一个数字。

    代码

    代码中传递的参数是字符串类型的形参s,而书中的参数是char型的形参s,故需要加*,取首元素地址。

    • map方式
    class Solution{
        public:
            char FirstNotRepeating(string s)
            {
                
                map<char,int> mp;
                for(int i = 0;i<s.size();i++)
                {
                    mp[s[i]]++;
                }
                for(int i = 0;i<s.size();i++)
                {
                    if(mp[s[i]] == 1)
                    {
                        return s[i];
                    }
                }
                return -1;
            }
    }
    
    • 简易的哈希表数组
    class Solution{
        public:
            char FirstNotRepeatingChar(string s)
            {
                int len = s.size();
                int *mp = new int[256];
                for(int i=0;i<len;i++)
                {
                    mp[s[i]]++;
                }
                for(int i=0;i<len;i++)
                {
                    if(mp[s[i]] == 1)
                    {
                        return s[i];
                    }
                }
                return -1;
            }
    };
    

    完整代码见GitHub

    相关文章

      网友评论

          本文标题:面试题50(1):第一次只出现一次的字符

          本文链接:https://www.haomeiwen.com/subject/ugiwghtx.html