LeetCode06

166 阅读1分钟

字符串中的第一个唯一字符

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

案例:

s = "leetcode" 返回 0.

s = "loveleetcode", 返回 2.

注意事项:您可以假定该字符串只包含小写字母。

class Solution {
    public int firstUniqChar(String s) {
        int index=-1;
        for(char c='a';c<='z';c++){
            int indexBegin=s.indexOf(c);
            if(indexBegin!=-1 && indexBegin==s.lastIndexOf(c)){
                if(index==-1 || index>indexBegin){
                    index=indexBegin;
                } 
            }
        }
        return index;
    }
}

解析:用Java自带的API来查找首次出现的字母和最后一次出现的字母,如果相同则说明此字母只出现了一次,如果出现了下标比之前index更小的,说明就更加到String s字符串前面的字符,就把这个下标去代替之前给到index的。


之前我自己的解法是按照字符串的顺序从0到s.length,依次去对比.

for (int i = 0; i < ss.length; i++) {
	boolean sign = true;
	for (int j = 0; j < ss.length; j++) {
            if (i != j && ss[i] == ss[j]) {
    	    sign = false;
    	    break;
    	    }
	}
	if (sign) {
		return i;
	}
}

这种写法要把所有的情况都要想到,以及字符串String s为空和只有一个字符的情况。速度很慢并且比较复杂。