387.字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = "leetcode"
返回 0
s = "loveleetcode"
返回 2
提示:你可以假定该字符串只包含小写字母。
思路
brute-force: O(n^2) i 枚举所有字符
j 枚举i后面的所有字符
map(hashmap(O(1)), treemap(O(logN))):
O(n) or O(Nlog(N))
- 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;
}
}