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

 

思路:

 1. 暴力解法(字典)。

  创建 ’a‘-’z‘ 的字典数组,第一次遍历字符串s,将 s 中字符存储到字典中,统计出现次数。

  第二次遍历字符串s,从字典中获取次数,返回结果。

class Solution {
    public char firstUniqChar(String s) {
        if (s.equals(""))
            return ' ';
        int[] res = new int[26];
        for(int i=0; i<s.length(); i++){
            res[s.charAt(i)-'a']++;
        }
        for(int i=0; i<s.length(); i++){
            if (res[s.charAt(i)-'a'] == 1)
                return s.charAt(i);
        }
        return ' ';
    }
}

 2. 哈希表

  思路与字典解法类似,

  1. 遍历字符串 s ,使用哈希表统计 “各字符数量是否 > 1 ”。
  2. 再遍历字符串 s ,在哈希表中找到首个 “数量为 1 的字符”,并返回。
class Solution {
    public char firstUniqChar(String s) {
        HashMap<Character, Boolean> dic = new HashMap<>();
        char[] sc = s.toCharArray();
        for(char c : sc)
            dic.put(c, !dic.containsKey(c));
        for(char c : sc)
            if(dic.get(c)) return c;
        return ' ';
    }
}

来源:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/solution/mian-shi-ti-50-di-yi-ge-zhi-chu-xian-yi-ci-de-zi-3/

 

posted @ 2021-02-13 02:35  zjcfrancis  阅读(31)  评论(0编辑  收藏  举报