🌈大家好!本篇文章将介绍关于数组与矩阵的OJ题,来自力扣:剑指 Offer 50. 第一个只出现一次的字符 题解,展示代码语言暂时为:C++代码 😇。
力扣C++打卡(12.07)!✊✊✊
🔒1、题目:
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
🌲示例 1🌲:
输入:s = "abaccdeff"
输出:'b'
🌲示例 2🌲:
输入:s = ""
输出:' '
❗️ 限制❗️ :
0 <= s 的长度 <= 50000
来源:力扣(LeetCode)👈
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/
☀️2、思路:
分析:创建一个哈希表,把出现的字符及对应的次数放到哈希表中,再进行遍历,就能解决返回第一个只出现一次的字符(有顺序)🏃
1️⃣ 创建哈希表,循环遍历字符串s,对字符进行统计并存入表中;
2️⃣ 遍历哈希表,返回第一个统计数为1的字符。
复杂度分析:
🚗时间复杂度 O(N): N为字符串 s 的长度;需遍历 s 两轮,使用 O(N);HashMap 查找操作的复杂度为 O(1);
⏳空间复杂度 O(1) :题目中指出 s 只包含小写字母,故最多有 26 个不同字符,HashMap 存储需占用 O(26)=O(1) 的额外空间。
🔑3、代码:
class Solution {
public:
char firstUniqChar(string s) {
//创建无序哈希表
unordered_map<char,int>m;
//遍历字符串并统计
for(int i = 0 ;i < s.size(); i ++){
m[s[i]]++;
}
for(int i = 0 ;i < s.size(); i ++){
if(m[s[i]] == 1)return s[i];
}
return ' ';
}
};
🐾4、总结
🌈这道题目较为简单,采用遍历的想法统计每个字符出现的次数,无序哈希表(有顺序)是一定要掌握,再对哈希表进行遍历,就能解决返回第一个只出现一次的字符(有顺序)👏👏。
🚀🚀觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦🙏 🙏🙌 !