剑指 Offer 50. 第一个只出现一次的字符
本问题对应的 leetcode 原文链接:剑指 Offer 50. 第一个只出现一次的字符
问题描述
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例1 :
输入:s = "abaccdeff"
输出:'b'
示例 2:
输入:s = ""
输出:' '
限制:
0 <= s 的长度 <= 50000
解题思路
视频讲解直达: 本题视频讲解
代码实现
class Solution {
public char firstUniqChar(String s) {
if(s == null || s.length() <= 0){
return ' ';
}
//一个字母出现的次数大于 1 次就不符合要求了,这个时候使用 Fasle 标记状态相对于 Integer 的不断递增更合理,也更省空间。布尔值可以用来判断,可以简化代码逻辑。
Map<Character, Boolean> map = new LinkedHashMap<>();
for(int i = 0; i < s.length(); i++){
map.put(s.charAt(i), !map.containsKey(s.charAt(i)));
}
for(Map.Entry<Character, Boolean> m : map.entrySet()){
if(m.getValue()){
return m.getKey();
}
}
return ' ';
}
}