LeetCode——第387题:字符串的第一个唯一字符

题目:

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

案例:

s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.

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

代码:

package leetCode;

/**
 * 2018.7.20 字符串的第一个唯一字符
 * 
 * @author dhc
 *
 */
public class ThreeHundredAndEightSeven {
    //双重循环本办法,特殊情况考虑不全易出错    60ms(也是对String的方法不熟)
    public static int firstUniqChar(String s) {
        int index = -1;
        char[] ss = s.toCharArray();
        if(ss.length == 1) {
            return 0;
        }
        if(ss.length == 0) {
            return -1;
        }
        out:for(int i = 0;i < ss.length;i++) {
            for(int j = 0;j < ss.length;j++) {
                if(i == ss.length -1 && j == ss.length -1) {
                    index = ss.length -1;
                }
                if(ss[i] != ss[j] && j == ss.length -1 && i != j) {
                    index = i;
                    break out;
                }
                if(ss[i] == ss[j] && i != j) {
                    break;
                }
            }
        }
        return index;
    }
    //大佬答案1(思路清晰易懂,本人觉着这个方法挺好,简单直白)
    public static int firstUniqChar1(String s) {
        char[] ss = s.toCharArray();
        for (int i = 0; i < ss.length; i++) {
            char a = s.charAt(i);
            if(s.indexOf(a) == s.lastIndexOf(a)) {
                return i;
            }
        }
        return -1;
    }
    //大佬答案2(有点绕)
    public static int firstUniqChar2(String s) {
        int[] charsCount = new int[26];
        //按字母顺序标记处有哪些字符,并且保存对应的出现次数
        for (int i = 0; i < s.length(); i++) {
            charsCount[s.charAt(i) - 'a'] += 1;
        }
        for (int i = 0; i < s.length(); i++) {
            //判断是否只出现依次,并且第一个出现一次的就返回
            if (charsCount[s.charAt(i) - 'a'] == 1)
                return i;
        }
        return -1;
    }
    //大佬答案3(有点绕)
    public static int firstUniqChar3(String s) {
        int result = -1;
        for(char c = 'a';c<='z';c++){
            int index = s.indexOf(c);
            if(index != -1 && index == s.lastIndexOf(c)){
                //有点绕,就是为了找出“第一个”唯一字符
                result = result != -1?Math.min(result,index):index;
            }
        }
        return result;
    }

    public static void main(String[] args) {
        String str = "cc";
        System.out.println(firstUniqChar2(str));
    }
}

猜你喜欢

转载自blog.csdn.net/rbreeze/article/details/81138743