209. First Unique Character in a String

描述

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

样例

对于 "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 map = new LinkedHashMap<>();
        Set 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 String)