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

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

作者: 辉_ace | 来源:发表于2021-12-18 22:19 被阅读0次

    问题

    给定一个字符串,获取该字符串中第一个唯一字符,如果不存在,则返回-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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/iofnfrtx.html