题目
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例:
s = "abaccdeff"
返回 "b"
s = ""
返回 " "
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
用一个 hashmap 储存 s 中每个元素出现的次数。
但由于 hashmap 是无序的,所以再从头遍历 s,按顺序查找 s 中每一个元素出现的次数即可。
代码
Java
class Solution {
public char firstUniqChar(String s) {
char [] charArray = s.toCharArray();
Map<Character,Integer> map = new HashMap<>();
for (char c : charArray) {
if(!map.containsKey(c)) {
map.put(c , 1);
} else {
Integer number = map.get(c);
map.put(c, number + 1);
}
}
for (char c : charArray) {
if (map.get(c) == 1)
return c;
}
return ' ';
}
}
C++
class Solution {
public:
char firstUniqChar(string s) {
if (s.empty()) {return ' ';}
if (s.length() == 1) {return s[0];}
unordered_map<char, int> store;
unordered_map<char, int> ::const_iterator itr;
for (int i = 0; i < s.length(); ++i) {
++store[s[i]];
}
for (char i : s) {
itr = store.find(i);
if (itr -> second == 1) {
return i;
}
}
return ' ';
}
};
Python
class Solution:
def firstUniqChar(self, s: str) -> str:
dic = dict()
for c in s:
if c in dic:
dic[c] += 1
else:
dic[c] = 1
res = []
for i in dic:
if dic[i] == 1:
res.append(i)
if res == []:
return " "
else:
return res[0]
JS
var firstUniqChar = function(s) {
if(!s) return " "
let map = new Map()
for(let c of s) {
if(map.has(c)) {
map.set(c, map.get(c) + 1)
} else {
map.set(c, 1)
}
}
for(let c of map.keys()) {
if(map.get(c) === 1) {
return c
}
}
return " "
};