码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-04-14 10:28:44      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:strong   直接   char   for   order   一个   sof   空格   https   

题目地址:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/

题目描述

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。

题目示例

示例:

s = "abaccdeff"
返回 "b"

s = "" 
返回 " "

解题思路

思路1:利用哈希表统计每个字符出现的次数,如果该字符出现的次数为1次,则直接返回。具体分为两步,第一步是将字符串s中每个字符出现的次数存储到哈希表中,第二步是遍历哈希表,将出现1次的字符返回。

思路2:数组优化哈希表

程序源码

哈希表

class Solution {
public:
    char firstUniqChar(string s) {
        if(s.size() == 0) return  ;
        unordered_map<char, int> mp;
        for(int i = 0; i < s.size(); i++)
        {
            mp[s[i]]++;
        }
        for(int j = 0; j < s.size(); j++)
        {
            if(mp[s[j]] == 1) return s[j];
        }
        return  ;
    }
};

数组优化哈希表

class Solution {
public:
    char firstUniqChar(string s) {
        if(s.size() == 0) return  ;
        vector<int> arr(26, 0);
        for(int i = 0; i < s.size(); i++)
        {
            arr[s[i] - a]++;
        }
        for(int j = 0; j < s.size(); j++)
        {
            if(arr[s[j] - a] == 1) return s[j];
        }
        /*for(char c:s)
        {
            arr[c - ‘a‘]++;
        }
        for(char c:s)
        {
            if(arr[c - ‘a‘] == 1) return c;
        }*/
        return  ;
    }
};

 

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

标签:strong   直接   char   for   order   一个   sof   空格   https   

原文地址:https://www.cnblogs.com/wzw0625/p/12696080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!