想法

终于写了一个比参考代码更优的解,没白花这么长时间思考!????
看到题目应该马上可以想出最简单的解,就是统计一遍然后查找为1的值。但是我们肯定是要找更优解的
∴我想到用边查找边匹配的方法My code

题目

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

示例:

s = "leetcode"
返回 0

s = "loveleetcode"
返回 2

提示:你可以假定该字符串只包含小写字母

链接
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

代码code

My code

从头开始向后查找匹配,若该字母匹配则记录;之后查找先在记录中查询是否之前匹配过

class Solution {
    public int firstUniqChar(String s) {
        int p=-1,j=0;
        int [] count=new int[26];
        char[] sc=s.toCharArray();
//  from 0 to end
        for(int i=0;i< sc.length;i++){
//  the letter has matched--pass
            if(count[sc[i]-'a']==0) {
//  search after i
                for (j = i + 1; j < sc.length; j++) {
                    if (sc[i] == sc[j]) {
                        count[sc[i] - 'a']++;
                        break;
                    }
                }
//  no match then j out index
                if (j == sc.length) {
                    p = i;
                    break;
                }
            }
        }
    return p;
    }

}

参考代码other's code

从前往后,从后往前 相同则是唯一值

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;
 }

作者:数据结构和算法
[链接](https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn5z8r/?discussion=6TyKA7)
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。