题目描述:
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode" 返回 0. s = "loveleetcode", 返回 2.
注意事项:您可以假定该字符串只包含小写字母。
两种代码:entrySet()和keySet(),最后都能ac,区别:entrySet()方法能一次性获得key和value。keySet()方法先获得key,再通过key获得value。
方法一:使用entrySet()
代码:
class Solution {
public int firstUniqChar(String s) {
Map<Character,Integer>mp=new LinkedHashMap<>();
for(int i=0;i<s.length();i++){
char temp=s.charAt(i);
if(mp.containsKey(temp))
mp.put(temp,-1);
else
mp.put(temp,i);
}
Set set=mp.entrySet();
for(Iterator it=set.iterator();it.hasNext();){
Map.Entry<Character,Integer> me=(Map.Entry)it.next();
if(me.getValue()!=-1)
return me.getValue();
}
return -1;
}
}
方法二:使用keySet()
代码:
class Solution {
public int firstUniqChar(String s) {
Map<Character,Integer>mp=new LinkedHashMap<>();
for(int i=0;i<s.length();i++){
char temp=s.charAt(i);
if(mp.containsKey(temp))
mp.put(temp,-1);
else
mp.put(temp,i);
}
Set set=mp.keySet();
for(Iterator it=set.iterator();it.hasNext();){
//Map.Entry<Character,Integer> me=(Map.Entry)it.next();
Character key=(Character)it.next();//先获得key
if(mp.get(key)!=-1)//通过key获得value,get(key)。
return mp.get(key);
}
return -1;
}
}