给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
解法1:
思路:把字符串使用toCharArray()转换成字符数组,遍历字符数组,使用LinkedHashMap (顺序不变)以字符为key,字符在字符串中的索引为value,如果key出现不只一次则对应的value置为-1。最后使用entrySet方法遍历map,把第一个value不为-1的value返回,如果遍历结束没有发现有符合要求的,返回-1.
class Solution {
public int firstUniqChar(String s) {
Map<Character,Integer> map=new LinkedHashMap<Character,Integer>();
char[] array=s.toCharArray();
int n=array.length;
for(int i=0;i<n;i++){
if(!map.containsKey(array[i])){
map.put(array[i],i);
}else{
map.put(array[i],-1);
}
}
for(Map.Entry<Character,Integer> entry : map.entrySet()){
if(entry.getValue()!=-1){
return entry.getValue();
}
}
return -1;
}
}
解法2:
思路:leetcode高效率答案,使用indexOf(),lastIndexOf()等方法。
class Solution {
public int firstUniqChar(String s) {
int result = -1;
for(char c = 'a';c<='z';c++){
int index = s.indexOf(c);
if(index != -1 && index == s.lastIndexOf(c)){
result = result != -1?Math.min(result,index):index;
}
}
return result;
}
}