1 题目描述
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。
示例:
s = “abaccdeff”
返回 “b”
s = “”
返回 " "
限制:
0 <= s 的长度 <= 50000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2 解题思路
- 方法: 哈希表
两次遍历解决问题,第一次记录字符出现的次数,第二次寻找出现次数为1 的字符,找到立刻返回
建立普通的字典,也是遍历一边字符串s,将这些字符和他们的出现次数放入到字典中
我们再次遍历s,在字典中进行查找,找到第一个值为1的字符即可,否则返回’ ’
时间复杂度O(n),空间复杂度O(1),因为字符的个数是常数个
3 解决代码
- 方法: 哈希表《Java代码》
class Solution {
public char firstUniqChar(String s) {
char[] res = s.toCharArray();
int[] dic = new int[256];
//第一次遍历,统计字符次数到字典数组
for(char c: res){
dic[c]++;
}
//第二次遍历,从字典中获取字符次数为1的字符
for(char c :res){
if(dic[c] == 1){
return c;
}
}
return ' ';
}
}
- 方法: 哈希表《python3代码》
class Solution:
def firstUniqChar(self, s: str) -> str:
if len(s) == 0:
return " "
dic = {}
for i in s:
if i in dic:
dic[i] = dic[i] + 1
else:
dic[i] = 1
for i in dic:
if dic[i] == 1:
return i
return " "