剑指offer系列——剑指 Offer 50. 第一个只出现一次的字符(C++)

✨剑指 Offer 50. 第一个只出现一次的字符✨

🌈大家好!本篇文章将介绍关于数组与矩阵的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、总结

🌈这道题目较为简单,采用遍历的想法统计每个字符出现的次数,无序哈希表(有顺序)是一定要掌握,再对哈希表进行遍历,就能解决返回第一个只出现一次的字符(有顺序)👏👏。

🚀🚀觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦🙏 🙏🙌 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

君莫笑lucky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值