给定一个字符串 s
,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1
。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/first-unique-character-in-a-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处
示例 1:
输入: s = "leetcode" 输出: 0
字符、数量、对应索引,首先想到HashMap进行对应字符和数量的统计,但没想到对应索引引出需再次遍历,获取HashMap的数值后返回应对索引。
题解一、
创建Map<Character,Integer> 进行统计字符数量,常用函数getOrDefault(obj,defaultValue)。
再次遍历,输出数量为1的字符对应的索引。此处输出数量时用get(Key)。
class Solution{
public int firstUniqChar(String s){
Map<Character,Integer> map = new HashMap<Character,Integer>();
for(int i = 0; i < s.length(); i++){
map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0) + 1);
}
for(int i = 0; i < s.length(); i++){
if(map.get(s.charAt(i)) == 1){
return i;
}
}
return -1;
}
}
题解二 、建立长度为26的数组,索引0-25对应'a'-'z',对应元素为出现的次数,两次遍历,一次遍历记数量,一次遍历查1。
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;
}
}