题目描述:
请实现一个函数用来找出字符流中第一个只出现一次的字符。
示例:
s = "abaccdeff"
返回 "b"
s = ""
返回 " "
限制 :0 <= s 的长度 <= 50000
这道题和剑指offer -第一个只出现一次的字符位置 - python是基本一样的,前者是返回第一个只出现一次的字符,后者是返回第一次只出现一次的字符的位置。使用Counter()得到字符串中字符和它出现次数的对应关系,遍历字典返回第一个值为1的键,否则返回" "
class Solution:
def firstUniqChar(self, s: str) -> str:
if s == "": return " "
l = Counter(list(s))
for k, v in l.items():
if v == 1:
return k
return " "
当然也可以自己逐个统计后遍历找到第一个出现次数为1的字符,如下所示:
class Solution {
public char firstUniqChar(String s) {
Map<Character, Integer> map = new LinkedHashMap<>();
char[] chars = s.toCharArray();
for (char c : chars) {
if(!map.containsKey(c)){
map.put(c, 1);
}else{
Integer value = map.get(c);
map.put(c, value + 1);
}
}
Set<Character> characters = map.keySet();
for (Character character : characters) {
if(map.get(character) == 1){
return character;
}
}
return ' ';
}
}
这里使用了Java中的Map,Python中使用dict是同样的逻辑。