[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. 两数相加