面试题50:第一个只出现一次的字符(C++)
Posted wzw0625
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题50:第一个只出现一次的字符(C++)相关的知识,希望对你有一定的参考价值。
题目地址: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++)的主要内容,如果未能解决你的问题,请参考以下文章