给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -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;
    }
}