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

144 阅读2分钟

「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」。

前言

大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。复制代码

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要介绍LeetCode题目 字符串中的第一个唯一字符 的一些解法和思路。

【题目】

【解法一】

【思路】

  1. 设置长度为26的数组,记录每个字符出现的次数
  2. 遍历字符串,统计每个字符出现的次数,放到数组中。
  3. 再次遍历字符串,如果某个字母对应的数组的值为1,即为符合条件,直接返回。
  4. 如果没有遇到,返回-1.

【代码】

public static int firstUniqChar(String s){
    /*
    解法1:使用一个长度为26的数组进行计数
     */
    int[] count = new int[26];
    for (int i = 0; i < s.length(); i++) {
        int index = s.charAt(i)-'a';
        count[index]+=1;
    }
    for (int i = 0; i < s.length(); i++) {
        int index = s.charAt(i)-'a';
        if(count[index]==1){
            return i;
        }
    }
    return -1;
}

【解法二】

【思路】

  1. 设置hashmap,保存每个字符出现的次数。

其余步骤和使用数组类似,这里就不再具体解释。

【代码】

public static int firstUniqChar(String s){
    /*
    解法2:哈希表 字母保存为k,出现的次数保存为value,思想和使用数组相同
     */
    Map<Character, Integer> map = new HashMap();
    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        map.put(ch,map.getOrDefault(ch,0)+1);
    }
    for (int i = 0; i < s.length(); i++) {
        if(map.get(s.charAt(i))==1){
            return i;
        }
    }
    return -1;
}

【解法三】

【思路】

该解法比较取巧,使用了java内置的api,indexof(返回该字母第一次出现的索引)和lastindexof(返回该字母最后一次出现的索引)方法,如果两者的返回值相同,表示该元素只有一个。

【代码】

public static int firstUniqChar(String s){
    /*
    解法3:如果indexof和lastindexof相同,那么这个元素肯定只有一个
     */
    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        if(s.indexOf(ch)==s.lastIndexOf(ch)){
            return i;
        }
    }
    return -1;
}

【解法四】

【思路】

直接求解

嵌套两层循环,依次遍历字符串的每个字符,内层循环用来判断是否该字符符合题意,并且在外层循环中设置标记,决定是否要结束循环。

【代码】

public static int firstUniqChar(String s) {
    for (int i = 0; i < s.length(); i++) {
        boolean flag=true;
        for (int j = 0; j < s.length(); j++) {
            if(s.charAt(i)==s.charAt(j) && i!=j){
                flag=false;
            }
        }
        if(flag){
            return i;
        }
    }
    return -1;
}

小结

以上就是关于该题的四种解法,第三种解法比较取巧,但是需要我们对于相对应的方法比较了解,希望以上内容能对读者有所帮助,如有不正之处,欢迎留言指正。