【字符串】剑指 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

浙公网安备 33010602011771号