首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【LeetCode必刷好题】:字符串首个唯一字符

【LeetCode必刷好题】:字符串首个唯一字符

作者头像
User_芊芊君子
发布2025-07-30 08:48:27
发布2025-07-30 08:48:27
7300
代码可运行
举报
运行总次数:0
代码可运行

🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:【Java】内容概括

一、题目背景

  • 这道题在力扣(leetcode)题库编号为387,关于字符串处理
  • 题目要求给定一个字符串s,找到它的第一个不重复的字符,并返回其索引,若不存在,返回-1
  • 主要考察对字符串遍历,字符计数以及逻辑流程的能力

二、解题思路

  • 遍历两次
  • 第一次:先统计每个字符出现的次数(全局统计)
  • 第二次:找到第一个次数为一的字符(按需验证)

【注意】:为什么要遍历两次? 字符串“leetcode

第一次遍历:e出现三次,其他字符出现一次 第二次遍历:排除e之后,找到第一个出现的l,然后返回索引

如果只遍历一次: e出现一次后,无法确定后面还有没有e,必须遍历完所有字符之后,再进行第二次遍历(按字符串顺序,因为第一次遍历放在数组中统计时,打乱了顺序),去找到我们的目标k

【总结】

so:两次遍历

  • 一是保持顺序,因为第一次遍历,放在数组中统计次数时,顺序被打乱
  • 二是要再第一次遍历次数统计完全后,再找第一次唯一的字符

三、代码实现

代码详解已经注释详细

代码语言:javascript
代码运行次数:0
运行
复制
  public class Test {
    public int firstUniqChar(String s){
        //创建数组,因为只有26个字母,所有范围给26即可
        int[] arr = new int[26];
        //第一次遍历:全局统计每个字符出现的次数
        for (int i = 0; i < s.length(); i++) {
            //获取索引为i的字符,并赋值给ch
            char ch = s.charAt(i);
            //ch-97得到的是索引位置,没遇到一次,次数++
            arr[ch-97]++;
        }
        //第二次遍历:找到第一个唯一出现的字符
        for (int i = 0; i < s.length(); i++) {
            //同理,先获取字符
            char ch = s.charAt(i);
            //判断,遇到第一个后直接返回索引
            if(arr[ch-97] == 1){
                return i;
            }
        }
        return -1;
    }
}

验证一下

代码语言:javascript
代码运行次数:0
运行
复制
 public static void main(String[] args) {

        Test test = new Test();
        String tmp = "leetcode";
        int ret = test.firstUniqChar(tmp);
        System.out.println(ret);
    }

四、总结

力扣“字符串中第一个唯一字符”题,通过 Java 实现的“数组统计 + 双遍历”方案,完美诠释了“先统计后查找”的经典算法思路。利用数组对固定范围字符的高效处理能力,在时间和空间复杂度上达到较优解。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目背景
  • 二、解题思路
  • 三、代码实现
  • 四、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档