剑指 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. 哈希表
思路与字典解法类似,
- 遍历字符串
s
,使用哈希表统计 “各字符数量是否 > 1 ”。 - 再遍历字符串
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/