387.first-unique-character-in-a-string


387.字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

 

示例:

s = "leetcode"
返回 0

s = "loveleetcode"
返回 2

提示:你可以假定该字符串只包含小写字母。

思路

  1. brute-force: O(n^2) i 枚举所有字符

    j 枚举i后面的所有字符
  2. map(hashmap(O(1)), treemap(O(logN))):

O(n) or O(Nlog(N))

  1. hashtable

解法一

class Solution {
    public int firstUniqChar(String s) {
        Map<Character, Integer> map = new HashMap<>();

        // 统计每个字符出现了多少次
        for (int i = 0; i < s.length(); i++) {
            map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1);
        }
        // 再找第一次出现了一次的字符
        for (int i = 0; i < s.length(); i++) {
            if (map.get(s.charAt(i)) == 1) return i;
        }
        return -1;
    }
}

解法二

class Solution {
    public int firstUniqChar(String s) {
        int count[256]; // 每个字符是个ASCII 范围是 256,以此变量统计
        // 统计每个字符出现了多少次
        for (int i = 0; i < s.length(); i++) {

        }
        // 再找第一次出现了一次的字符
        for (int i = 0; i < s.length(); i++) {

        }
        return -1;
    }
}