给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
分析:
题解一:
开数组存字符,首次遍历将各个字符次数存入数组,再次遍历将第一次出现的次数为 1 的字符返回
class Solution {
public int firstUniqChar(String s) {
int len = s.length();
if (len == 0)
return -1;
int[] bucket = new int[26];
for (int i = 0; i < len; i++) {
bucket[s.charAt(i) - 'a']++;
}
for (int i = 0; i < len; i++) {
if (bucket[s.charAt(i) - 'a'] == 1)
return i;
}
return -1;
}
}
题解二:
借助 indexOf 和 lastIndexOf 函数,
indexOf 从开始查找字符串中指定字符,如果找到返回第一次出现的下标,如果没找到返回 -1,
lastIndexOf 从末尾查找字符串中指定字符,如果找到返回第一次出现的下标,如果没找到返回 -1
遍历字符串,对每个字符进行 indexOf 和 lastIndexOf 返回结果,如果结果相同说明只字符串中只存在一个该字符,即找到了
class Solution {
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;
}
}