• leetcode 387. First Unique Character in a String(字符串中第一个独一无二的字母)


    Given a string s, find the first non-repeating character in it and return its index. If it does not exist, return -1.

    Example 1:

    Input: s = “leetcode
    Output: 0
    Example 2:

    Input: s = “loveleetcode”
    Output: 2
    Example 3:

    Input: s = “aabb”
    Output: -1

    找出字符串s 中只出现一次的字母,返回它的index。
    如果没有,返回-1。

    思路:

    网上有个1ms的解法,用到了字符串自带的indexOf, lastIndexOf函数,
    如果它俩相等,证明只出现了一次,更新最小的index即可。

    public int firstUniqChar(String s) {
        int result=s.length();
        
        for(char c='a';c<='z';c++){
            int firstIndex=s.indexOf(c);
            if(firstIndex!=-1 && firstIndex==s.lastIndexOf(c)){
                result=Math.min(result, firstIndex);
            }
        }
        
        return result==s.length()?-1:result;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    这里我们不用字符串自带的函数,
    因为字母只有26个,所以用一个数组记录下每个字母出现的次数,
    然后找到次数为1的字母,它出现的最小index即可,

    找最小index岂不是又要把s 遍历一次?no,
    还是用一个数组记录下每个字母出现的最小index,
    直接找到对应的index, 然后更新最小的index即可。

    public int firstUniqChar(String s) {
        int[] cnt = new int[26];
        int[] firstIdx = new int[26];
        int res = s.length();
            
        Arrays.fill(firstIdx, -1);
        
        for(int i = 0; i < s.length(); i++) {
            int idx = s.charAt(i) - 'a';
            cnt[idx] ++;
            if(firstIdx[idx] == -1) firstIdx[idx] = i;
        }
        
        for(int i = 0; i < 26; i++) {
            if(cnt[i] == 1) res = Math.min(res, firstIdx[i]);
        }
        
        return (res == s.length() ? -1 : res);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    汽车信息安全--HSM和TEE的区别
    C++数据结构补充(线性表及其链式存储结构:单链表)
    S7net【C#】
    物联网智能家居系统概述和相关技术
    【无标题】
    HTML5+CSS3小实例:脉冲波纹催眠动画特效
    C#Winform新建工程
    Kafka介绍、安装以及原理解析
    图像任务知识蒸馏调研(一)
    [笔记] 深度学习的部分专业名词
  • 原文地址:https://blog.csdn.net/level_code/article/details/126367443