【力扣】387.字符串中的第一个唯一字符

问题描述

思路解析

  • 对于这种个数有限的问题,我的第一想法是使用桶排序来解决
  • 因为s中只有小写英文单词,所以我只需要一个26个单位的数组就好了
  • 通过 charAt() 来提取单个字符,然后通过 -'a' 来将其映射到 0~25,不然数组长度就被超过了
  • 之后再++,最后再遍历一遍,只要==1 ,则代表只出现一次
  • 需要注意的是,不能直接在 数组 char[0]~char[25]之间遍历,因为这样模糊了前后关系,就没办法知道哪个是第一个出来的了

代码

java 复制代码
class Solution {
    public int firstUniqChar(String s) {
        /**
            想法是用字符串数组来存储
            char[s.charAt()]++ 来代表
            并且只有小写数组,所以可以遍历
            char[a]~char[z],不对,这样遍历,会找不出,第一个不重复的,打乱了顺序
            还是得循环字符串的来寻找
         */
        int n=s.length();
        int[] arr=new int[26];
        for(int i=0;i<n;i++){
            arr[s.charAt(i)-'a']++;
        }
        for(int i=0;i<n;i++){
            if(arr[s.charAt(i)-'a']==1)
                return i;
        }
        return -1;
    }
}
相关推荐
Swift社区4 分钟前
LeetCode 380 O(1) 时间插入、删除和获取随机元素
算法·leetcode·职场和发展
budingxiaomoli4 分钟前
优选算法-哈希表
数据结构·算法·散列表
高频交易dragon11 分钟前
An Impulse Control Approach to Market Making in a Hawkes LOB Market从论文到生产
人工智能·算法·机器学习
平哥努力学习ing21 分钟前
线性表与链表(part 1)
数据结构·链表
java修仙传37 分钟前
力扣hot100:划分字母区间
算法·leetcode·职场和发展
Frank_refuel40 分钟前
C++STL之set和map的接口使用介绍
数据库·c++·算法
java修仙传41 分钟前
力扣hot100:跳跃游戏||
算法·leetcode·游戏
闻缺陷则喜何志丹42 分钟前
【模拟】P9670 [ICPC 2022 Jinan R] Frozen Scoreboard|普及+
c++·算法·模拟·洛谷
永远都不秃头的程序员(互关)44 分钟前
【K-Means深度探索(十一)】K-Means VS 其他聚类算法:如何选择最合适的工具?
算法·kmeans·聚类
洛生&1 小时前
Nested Ranges Count
算法