Skip to content

LeetCode-面试题50-第一次只出现一次的字符

题目

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。

示例1:

s = "abaccdeff"
返回 "b"

s = "" 
返回 " "

说明:

0 <= s 的长度 <= 50000

解题思路

哈希表:

每出现一次字符就把字符放入hash表中,如果有重复的就把对应位置+1

遍历的时候由于hash表重新put改变了原本的先后顺序(Java的hashmap不能原地改变,Python的dict可以原地改变),所以需要按照字符顺序遍历,当第1次value为1的时候,就返回该字符

Java代码

java
class Solution {
    public char firstUniqChar(String s) {
        if (s == null || s.length() == 0)
            return ' ';
        HashMap<Character, Integer> maps = new HashMap<>();
        char[] chars = s.toCharArray();
        for (char c : chars) {
            if (!maps.containsKey(c)) {
                maps.put(c, 1);
            } else {
                maps.put(c, maps.get(c) + 1);
            }
        }

        for (char c : chars) {
            if (maps.get(c) == 1) {
                return c;
            }
        }
        return ' ';
    }
}

Python代码1

python
class Solution:
    def firstUniqChar(self, s: str) -> str:
        if not s or len(s)==0:
            return ' '
        d = {}
        for i in s:
            if i not in d:
                d[i] = 1
            else:
                d[i]+=1
        for k,v in d.items():
            if v==1:
                return k
        return ' '