【字符串】剑指 Offer 50. 第一个只出现一次的字符

题目:

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

示例:

s = "abaccdeff"
返回 "b"

s = ""
返回 " "
 

限制:

0 <= s 的长度 <= 50000

 

解答:

方法一:(用哈希表)

时间复杂度:O(n)

空间复杂度:O(n)

class Solution {
    public char firstUniqChar(String s) {
        HashMap<Character,Boolean> map = new HashMap<>();
        char ch[] = s.toCharArray(); //常常将string变量转存到char数组中以便使用for each循环。
        for(char c : ch){
            map.put(c,!map.containsKey(c));
        }

        for(char c: ch){
            if(map.get(c)) return c;
        }
        return ' ';
    }
}

方法二:(用有序哈希表LinkedHashMap)

时间复杂度:O(n)

空间复杂度:O(n)

class Solution {
    public char firstUniqChar(String s) {
        Map<Character, Boolean> dic = new LinkedHashMap<>();
        char[] sc = s.toCharArray();
        for(char c : sc)
            dic.put(c, !dic.containsKey(c));
     //注意HashMap的遍历方法
for(Map.Entry<Character, Boolean> d : dic.entrySet()){ if(d.getValue()) return d.getKey(); } return ' '; } }

HashMap的四种遍历方法:https://blog.csdn.net/yanxin1213/article/details/80238809

posted @ 2020-07-29 19:09  3KBLACK  阅读(61)  评论(0)    收藏  举报