题目描述
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
样例
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
算法1
(扫描) $O(n)$
用一个26长度的数组统计每个字母出现的次数
依次扫描字符,看出现的次数是否为1
时间复杂度分析:O(n)
Java 代码
class Solution {
public int firstUniqChar(String s) {
int[] arr = new int[26];
for (int i=0;i<s.length();i++) {
arr[s.charAt(i)-'a']++;
}
for (int i=0;i<s.length();i++) {
if (arr[s.charAt(i)-'a']==1)
return i;
}
return -1;
}
}
可以将每个字符第一次出现的位置存下来,这样第二次只需要遍历26个字母而不是整个字符串了。如果字符串比较长的话,可以使用这种方法。