• 【LeetCode】387. 字符串中的第一个唯一字符


    💒越做题越觉得自己是菜鸡

    在这里插入图片描述

    🧸读题

    找到第一个,出现一次的字符,的下标。

    🧸代码 O(N)

    思路:用映射的方式查找,开一个数组记录每个字幕出现的次数,再找出数组中第一个是1的映射的字符!

    class Solution {
    public:
        int firstUniqChar(string s) {
            int countArr[26] = { 0 };
            //统计次数
            for (int i = 0; i < s.size(); ++i)
            {
                countArr[s[i] - 'a']++;
            }
            for (int j = 0; j < s.size();++j)
            {
                if (countArr[s[j] - 'a'] == 1)
                {
                    return j;
                }
            }
            return -1;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    🧸解读代码

    通过映射的方式解决问题
    int countArr[26] = { 0 };

    题目说只有小写字母,所以映射的数组直接开26个即可!
    并且初始化为0
    s中的每个字符映射到,countArr所在的下标,countArr下标存的数字就是 这个字符出现的次数!

    for (int i = 0; i < s.size(); ++i)
    {
      countArr[s[i] - 'a']++;
    }

    icountArr数组的下标,范围是s.size()
    例如查找l ,假设s[i]存储的是l ,遍历字符数组
    'l' - 'a'等于11,也就是l映射到countArr的下标
    所以在countArr[11] 的位置上 ++ ,如果l出现两次则在 countArr[11]的位置再++

    for (int j = 0; j < s.size();++j)
    {
      if (countArr[s[j] - 'a'] == 1)
      {
        return j;
      }
    }

    这个循环是遍历s字符串
    js字符串的下标,范围是s.size()
    例如查找l,假设l的位置是s[j]
    因为'l' - 'a'等于11,也就是l映射到countArr[]的下标,这个下标存的是l出现的次数!
    所以如果countArr[s[j] - 'a'] == 1
    那么s[j]中的j就是,只出现一次的l字符,的下标!

    🧸我快写蒙圈了,希望你看懂了!!!

    🧸其他大佬的解法

    这个解法是O(N2)
    遍历数组,同时在两头向中间找,如果都找到了并且下标相同,则这个字符在整个s中只出现一次,此时直接返回下标即可

    class Solution {
    public:
        int firstUniqChar(string s) {
            for(int i = 0;i<s.size();++i)
    		{
    			if(s.find(s[i]) == s.rfind(s[i]))
    			{
    				return i;
    			}
    		}
            return -1;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    🌈加油,祝你拿到心仪的offer!

  • 相关阅读:
    前端:时间你用对了吗?
    MediaPlayer_Analyze-1-framework
    22款奔驰GLS450升级香氛负离子 清除异味
    在 Next.js 中实现用户授权
    SpringBoot 整合【MybatisPlus、Shiro】实现权限认证信息
    npm run dev后浏览器没有出现页面
    【信号处理】Matlab实现语音变速变调
    编写两位数合并为一个数的程序,用C++及C语言分别实现。
    【论文学习】GraphFM: Graph Factorization Machines for Feature Interaction Modeling
    “大图模型”亮相外滩大会,蚂蚁开创大模型与图计算融合研究
  • 原文地址:https://blog.csdn.net/iluo12/article/details/125432960