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

https://leetcode.cn/problems/first-unique-character-in-a-string/

java 复制代码
/**
 * 找到字符串中第一个只出现一次的字符的下标;若不存在返回 -1。
 *
 * 思路:
 * 1) 用长度为 26 的计数数组统计每个小写字母出现次数;
 * 2) 再从左到右扫描字符串,遇到出现次数为 1 的字符就返回其下标。
 *
 * 时间复杂度:O(n)(两次遍历字符串)
 * 空间复杂度:O(1)(固定 26 大小数组)
 *
 * 说明:仅适用于全为小写字母 'a'~'z' 的字符串。
 */
class Solution {
    public int firstUniqChar(String s) {
        int[] a = new int[26]; // 统计每个小写字母出现次数(a[0] 对应 'a',a[25] 对应 'z')

        // 第一次遍历:计数
        for (int i = 0; i < s.length(); i++) {
            char tmp = s.charAt(i);
            a[tmp - 'a']++;
        }

        // 第二次遍历:找到第一个出现次数为 1 的字符
        for (int i = 0; i < s.length(); i++) {
            if (a[s.charAt(i) - 'a'] == 1) {
                return i; // 返回下标
            }
        }

        return -1; // 没有只出现一次的字符
    }
}
相关推荐
萧西待水2 小时前
奥赛一本通 1447 靶形数独
算法·深度优先
泯泷4 小时前
那段文字是谁删的?Yjs 14 正式版之前,一套删除归属方案的实现与边界
前端·javascript·算法
hold?fish:palm4 小时前
34 合并K个升序链表
javascript·算法·链表
Navigator_Z6 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
语戚8 小时前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
青山木8 小时前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划
这料鬼有毒9 小时前
二刷hot100-1143.最长公共子序列
算法·leetcode·动态规划
政企项目老覃10 小时前
边缘 AI 推理部署:安防零售场景下的模型裁剪与端侧落地实践
人工智能·程序人生·算法·性能优化·vllm
GreenTea12 小时前
发布 3 天登顶 HN:不生成一个字的模型 Jev,我把它的源码和黑料都扒了一遍
前端·后端·算法
庖丁解牛12 小时前
无穷小不是一个“神秘小数”,而是一场奔向 0 的过程
算法