[LeetCode]剑指 Offer 50. 第一个只出现一次的字符

Posted Spring-_-Bear

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode]剑指 Offer 50. 第一个只出现一次的字符相关的知识,希望对你有一定的参考价值。

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

示例 1:

输入:s = “abaccdeff”
输出:‘b’

示例 2:

输入:s = “”
输出:’ ’

限制:

0 <= s 的长度 <= 50000

题解一:

	/**
     * 剑指 Offer 50. 第一个只出现一次的字符
     */
    public char firstUniqChar(String s) 
        Map<Character, Boolean> map = new HashMap<>();
        char[] chars = s.toCharArray();

        // 遍历所有字符,使用 Map 统计次数,如果出现次数大于 1 则不符题意
        for (char ch : chars) 
            map.put(ch, !map.containsKey(ch));
        

        for (char ch : chars) 
            // 再次遍历 chars,从 Map 中找出第一个只出现一次的字符
            if (map.get(ch)) 
                return ch;
            
        
        return ' ';
    

题解二:

	/**
     * 剑指 Offer 50. 第一个只出现一次的字符
     */
    public char firstUniqChar(String s) 
        char[] chars = s.toCharArray();
        // 使用有序的 LinkedHashMap 替代无序的 HashMap
        Map<Character, Boolean> map = new LinkedHashMap<>();
        for (char ch : chars) 
            map.put(ch, !map.containsKey(ch));
        

        // 直接遍历有序的 Map,减少遍历次数
        for (Map.Entry<Character, Boolean> entries : map.entrySet()) 
            if (entries.getValue())
                return entries.getKey();
            
        
        return ' ';
    

以上是关于[LeetCode]剑指 Offer 50. 第一个只出现一次的字符的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode(剑指 Offer)- 50. 第一个只出现一次的字符

LeetCode(剑指 Offer)- 50. 第一个只出现一次的字符

LeetCode692. 前K个高频单词 / 剑指 Offer 50. 第一个只出现一次的字符 / 剑指 Offer 51. 数组中的逆序对 / 2. 两数相加

Leetcode剑指Offer学习计划第一天题目

Leetcode剑指Offer学习计划第一天题目

Leetcode剑指Offer学习计划第一天题目