第一个只出现一次的字符

98 阅读1分钟

「这是我参与2022首次更文挑战的第13天,活动详情查看:2022首次更文挑战

题目

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

示例 1:

输入:s = "abaccdeff"
输出:'b'

示例 2:

输入:s = "" 
输出:' '

限制:

0 <= s 的长度 <= 50000

题目分析

这道题主要涉及哈希表和字符串的操作,主要用到一个哈希表做辅助,遍历一次判断哈希表中是否存在key,如果不存在key,对应key的value值为true,存在key,设置value值为false,然后取出第一个为true的字符。

代码实现

class Solution {
    public char firstUniqChar(String s) {
        HashMap<Character, Boolean> hashMap = new HashMap<>();
        char[] chars = s.toCharArray();
        for (char c : chars) {
            hashMap.put(c,!hashMap.containsKey(c));
        }
        for (char c: chars) {
            if (hashMap.get(c)) {
                return c;
            }
        }
        return ' ';
    }
}

这是我用java实现的功能,每个题都用不同的解法和写法,我大体整理了一下自己的思路然后就写了,也没有再想其他的方法,如果你有更好的解法,欢迎和我留言,我们一起进步,一起学习数据结构,共同进步,通过这道题能更熟悉哈希表的操作。

除了使用这个哈希表来进行实现这个功能外,还可以使用有序哈希表来进行操作,有序哈希表LinkedHashMap有个特点就是按照插入的顺序进行排序,在取第一个数的时候可以直接取哈希表中的第一个数,使用普通的哈希表需要遍历两次给定的字符串,而使用有序哈希表需要遍历一次给定的字符串,再遍历一次哈希表,当给定的字符串的字符串长度越长,重复性越高的时候,有序哈希表的效率也就越高。

总结

这篇文章主要解决了一下取一个字符串中第一次出现不重复的字符,可以使用哈希表和有序哈希表两种方法。

如果有不当之处,欢迎指正。