「这是我参与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有个特点就是按照插入的顺序进行排序,在取第一个数的时候可以直接取哈希表中的第一个数,使用普通的哈希表需要遍历两次给定的字符串,而使用有序哈希表需要遍历一次给定的字符串,再遍历一次哈希表,当给定的字符串的字符串长度越长,重复性越高的时候,有序哈希表的效率也就越高。
总结
这篇文章主要解决了一下取一个字符串中第一次出现不重复的字符,可以使用哈希表和有序哈希表两种方法。
如果有不当之处,欢迎指正。