387. 字符串中的第一个唯一字符
难度:简单
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
示例:
s = "leetcode"
返回 0
s = "loveleetcode"
返回 2
**提示:**你可以假定该字符串只包含小写字母。
解题:
class Solution {
//哈希表
//时间复杂度O(N)。空间复杂度O(∣Σ∣),其中Σ 是字符集
public int firstUniqChar(String s) {
Map<Character, Integer> ansMap = new HashMap<>();
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
ansMap.put(ch, ansMap.getOrDefault(ch, 0) + 1);
}
for(int i = 0;i < s.length(); i++){
if(ansMap.get(s.charAt(i)) == 1){
return i;
}
}
return -1;
}
}
class Solution {
//遍历字符串如果当前字符的第一个索引和最后一个索引不是同一个则继续遍历,是同一个返回即可。
//时间复杂度O(N)。空间复杂度O(1)
public int firstUniqChar(String s) {
for (int i = 0; i < s.length(); i++) {
if (s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))) {
return i;
}
}
return -1;
}
}
class Solution {
//数组记录
//时间复杂度O(N)。空间复杂度O(∣Σ∣),其中Σ 是字符集
public int firstUniqChar(String s) {
int[] arr = new int[26];
int n = s.length();
for (int i = 0; i < n; i++) {
arr[s.charAt(i)-'a']++ ;
}
for (int i = 0; i < n; i++) {
if (arr[s.charAt(i)-'a'] == 1) {
return i;
}
}
return -1;
}
}
参考自:
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/first-unique-character-in-a-string/solution/zi-fu-chuan-zhong-de-di-yi-ge-wei-yi-zi-x9rok/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。