给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode" 返回 0. s = "loveleetcode", 返回 2.
注意事项:您可以假定该字符串只包含小写字母。
我的解答:两次遍历字符串 ,找到不重复的字母,时间复杂度为2O(n);
class Solution {
public int firstUniqChar(String s) {
if(null==s||0==s.length()) return -1;
//对应26个字母
//int数组初始化的值为0
// a - 0 : 0
// b - 1 : 0
// c - 2 : 0
// d - 3 : 0
int [] a = new int[26];
char[] ss = s.toCharArray();
//第一次遍历:如果遇见相同的字母,则对应字母下标位置上的值会++
// 假设输入字符串为: bcc,则数组a的值变为
// a - 0 : 0
// b - 1 : 1
// c - 2 : 2
// d - 3 : 0
//所以只出现一次的字母下标上的值为1
for(int i = 0;i < ss.length;i++){
a[ss[i]-'a']++;
}
//按照字母的顺序去遍历数组,得到的第一个值为1的字母,就是第一个不重复的字母,对应下标为j
for(int j = 0;j < s.length();j++){
if(a[ss[j]-'a'] == 1){
return j;
}
}
return -1;
}
}