力扣Lc27--队列-- 387. 字符串中的第一个唯一字符(java版)-2024年4月02日

发布于:2024-04-03 ⋅ 阅读:(107) ⋅ 点赞:(0)

1.题目描述

在这里插入图片描述

2.知识点

注1:

String类提供了一个repeat方法,该方法用于将指定的字符串重复指定的次数。

public class Main {
    public static void main(String[] args) {
        String repeatedString = "abc".repeat(3);
        System.out.println(repeatedString);  // 输出:abcabcabc
    }
}

注2:

HashMap 中的键必须是唯一的,不能重复。
HashMap中添加一个已经存在的键,新的键的值会覆盖原有键的值。
HashMap 中的值是可以重复的。

注3:

map.getOrDefault 是一个 HashMap 方法,它用于获取与指定键关联的值,如果这个键不存在,则返回指定的默认值。
V getOrDefault(Object key, V defaultValue)
key:要在此映射中查找的键。
defaultValue:如果指定键在映射中不存在,则返回的默认值。

import java.util.HashMap;

public class Main {
    public static void main(String[] args) {
        HashMap<String, Integer> scores = new HashMap<>();
        
        // 添加学生的成绩
        scores.put("Alice", 90);
        scores.put("Bob", 85);
        scores.put("Charlie", 95);

        // 获取学生的成绩
        int aliceScore = scores.getOrDefault("Alice", 0);
        int davidScore = scores.getOrDefault("David", 0);  // David 不在 HashMap 中,返回默认值 0

        System.out.println("Alice's score: " + aliceScore);  // 输出:Alice's score: 90
        System.out.println("David's score: " + davidScore);  // 输出:David's score: 0
    }
}

,getOrDefault 方法允许我们安全地从 HashMap 中获取值,即使指定的键不存在,也不会抛出 NullPointerException,而是返回一个默认值。

3.代码实现

class Solution {
    public int firstUniqChar(String s) {
    
     char[] cs=s.toCharArray();
     HashMap<Character,Integer> map=new HashMap<>();
     for(int i=0;i<cs.length;i++)
     {
        char c=cs[i];
        map.put(c,map.getOrDefault(c,0)+1);
       /*尝试从 map 中获取键 c 对应的值。
如果 c 存在于 map 的键集合中,则返回 c 对应的值;如果 c 不存在于 map 的键集合中,则返回默认值 0。
然后,将获取到的值加 1。*/
     }
     // 遍历HashMap找到第一个出现次数为1的字符
     for(int i=0;i<cs.length;i++)
     {
       char c=cs[i];
       if(map.get(c)==1)
       {
        return i;
       }
     }
      return -1;

    

    }
}

例子:

在这里插入图片描述