给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
第一种方法(hashmap略慢)
class Solution {
public int firstUniqChar(String s) {
HashMap<Character,Integer> map=new HashMap<Character,Integer>();
if(s==null) return -1;
for(int i=0;i<s.length();i++){//把s的元素放进哈希表。该字符出现几次,value就等于几
if(map.containsKey(s.charAt(i))) map.put(s.charAt(i),map.get(s.charAt(i))+1);
else{
map.put(s.charAt(i),1);
}
}
for(int i=0;i<s.length();i++){
if(map.get(s.charAt(i))==1) return i;//找到等于1的,马上返回
}
return -1;
}
}
第二种方法(ASCII码 稍快)
class Solution {
public int firstUniqChar(String s) {
int count[]=new int[26];//初始化数组,用来存放字符重复次数
for(int i=0;i<s.length();i++){
count[s.charAt(i)-'a']++;
}
for(int i=0;i<s.length();i++){
if(count[s.charAt(i)-'a']==1) return i;
}
return -1;
}
}