📅  最后修改于: 2023-12-03 14:50:47.716000             🧑  作者: Mango
给定一个字符串,包含大小写字母和数字,找到第一个非重复的字符,并返回该字符的下标。如果不存在,则返回 -1。
例如,输入字符串 abca
,第一个非重复的字符是 b
,它的下标是 1;输入字符串 abbcb
,不存在非重复字符,返回 -1。
我们可以使用哈希表来记录每个字符出现的次数。首先遍历一遍字符串,通过哈希表记录每个字符出现的次数。然后再遍历一遍字符串,找到第一个出现次数为 1 的字符即可。
时间复杂度为 O(n)。
以下是 Python 代码实现:
def first_unique_char(s: str) -> int:
counter = {}
for c in s:
counter[c] = counter.get(c, 0) + 1
for i, c in enumerate(s):
if counter[c] == 1:
return i
return -1
以下是 Java 代码实现:
public static int firstUniqueChar(String s) {
Map<Character, Integer> counter = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
counter.put(c, counter.getOrDefault(c, 0) + 1);
}
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (counter.get(c) == 1) {
return i;
}
}
return -1;
}
我们可以使用下面的测试样例来测试算法的正确性:
assert first_unique_char("abca") == 1
assert first_unique_char("abbcb") == -1
assert first_unique_char("leetcode") == 0
测试通过后,我们可以提交代码。