美文网首页
209. First Unique Character in a

209. First Unique Character in a

作者: 6默默Welsh | 来源:发表于2018-03-20 20:04 被阅读32次

描述

给出一个字符串,找出第一个只出现一次的字符。

样例

对于 "abaccdeff", 'b'为第一个只出现一次的字符.

思路

  1. 对于当前字符,和后面每个字符相比较,如果没发现重复字符,则当前字符即为题目解,但此做法时间复杂度为 O(n),会超时
  2. 定义一个数组或者哈希表来记录每个字符出现次数,找到出现次数为 1 的字母

代码

  1. 遍历两次
public class Solution {
    /**
     * @param str: str: the given string
     * @return: char: the first unique character in a given string
     */
    public char firstUniqChar(String str) {
        if (str == null) {
            return ' ';
        }
        
        int[] records = new int[256];
        for (int i = 0; i < str.length(); i++) {
            records[str.charAt(i) - 'a']++;
        }
        for (int i = 0; i < str.length(); i++) {
            if (records[str.charAt(i) - 'a'] == 1) {
                return str.charAt(i);
            }
        }
        
        return ' ';
    }
}
  1. 遍历一次
public class Solution {
    /**
     * @param str: str: the given string
     * @return: char: the first unique character in a given string
     */
    public char firstUniqChar(String str) {
        Map<Character, Integer> map = new LinkedHashMap<>();
        Set<Character> set = new HashSet<>();
        for (int i = 0; i < str.length(); i++) {
            if (set.contains(str.charAt(i))) {
                map.remove(str.charAt(i));
            } else {
                map.put(str.charAt(i), i);
                set.add(str.charAt(i));
            }
        }
        return map.size() == 0 ? ' ' : map.entrySet().iterator().next().getKey();
    }
}

相关文章

网友评论

      本文标题:209. First Unique Character in a

      本文链接:https://www.haomeiwen.com/subject/worbfftx.html