每日两道算法题 - 字符串中第一个唯一字符(高频)

2021-12-18  本文已影响0人  辉_ace

问题

给定一个字符串,获取该字符串中第一个唯一字符,如果不存在,则返回-1。

思路

第一种解法:
利用哈希表,key为字符,value为出现的次数(初始值为1)。
遍历字符串中每一个字符并放入哈希表,如果出现多次,则该字符对应的值自增。
遍历每一个字符,判断字符对应value是否等于1,如果等于1,则返回该字符的下标。如果遍历完仍不满足条件,则返回-1。
第二种解法:
利用javaApi。
charAt(index) : 根据下标获取对应字符。
indexOf(char) : 获取字符第一个下标
lastIndexOf(char) : 获取字符最后一个下标
如果字符的两个下标相等,则代表为第一次出现

实现

第一种解法:哈希表

//获取字符串中第一个不重复的字符,并返回其下标
public class FirstUniqChar {

    public static void main(String[] args) {
        String s = "hello";
        int index = firstUniqCharForHash(s);
        System.out.println(index);
    }

    private static int firstUniqCharForHash(String string) {
        /**
         * 利用hashmap
         * 遍历字符串中每一个字符, 并添加到map中,key为该字符,value为出现的次数
         * 遍历字符,从map中获取,如果某个字符在map中的值 不等于 0 ,则返回该字符下标
         */
        char[] chars = string.toCharArray();
        Map<Character,Integer> map = new HashMap<>();
        for (char c : chars) {
            map.put(c,map.getOrDefault(c,0)+1);
        }
        for (int i=0;i<chars.length;i++){
            if (map.get(chars[i]) == 1){
                return i;
            }
        }
        return -1;
    }

}
image.png

第二种解法:javaApi

public class FirstUniqChar {

    public static void main(String[] args) {
        String s = "hello";
        int index = firstUniqCharForApi(s);
        System.out.println(index);
    }

    private static int firstUniqCharForApi(String s) {

        char[] chars = s.toCharArray();
        for (int i=0;i<chars.length;i++){
            if (s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))){
                return i;
            }
        }
        return -1;

    }
}
image.png
上一篇下一篇

猜你喜欢

热点阅读