"Sword Finger Offer" -54. El primer personaje no repetido en la secuencia de personajes

1. Puntos de conocimiento de esta pregunta

Tabla de picadillo

2. Descripción del título

Implemente una función para encontrar el primer carácter que aparece solo una vez en el flujo de caracteres. Por ejemplo, cuando los dos primeros caracteres "go" se leen solo del flujo de caracteres, el primer carácter que aparece solo una vez es "g". Al leer los primeros seis caracteres "google" de este flujo de caracteres, el primer carácter que aparece solo una vez es "l".

Si no hay ningún carácter que aparezca una vez en la secuencia de caracteres actual, se devuelve el carácter #.

3. Ideas para la resolución de problemas

  1. Use HashMap para crear un mapeo entre cada carácter y su número de ocurrencias
  2. Atraviese la cadena a su vez, busque el primer carácter con 1 aparición y devuelva ese carácter
  3. Si no hay ningún carácter que aparezca una vez en la secuencia de caracteres actual, devuelve el carácter #

4. Código

public class Solution {
    
    
    String str = "";

    public void Insert(char ch) {
    
    
        str += ch;
    }

    public char FirstAppearingOnce() {
    
    
        // 用 HashMap 建立每个字符与其出现次数的映射
        HashMap<Character, Integer> hashMap = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
    
    
            char c = str.charAt(i);
            hashMap.put(c, hashMap.getOrDefault(c, 0) + 1);
        }

        // 依次遍历字符串,找到第一个出现次数为 1 的字符,返回该字符
        for (int i = 0; i < str.length(); i++) {
    
    
            char c = str.charAt(i);
            if (hashMap.get(c) == 1) {
    
    
                return c;
            }
        }
        // 如果当前字符流没有存在出现一次的字符,返回 # 字符
        return '#';
    }
}

Supongo que te gusta

Origin blog.csdn.net/bm1998/article/details/112962030
Recomendado
Clasificación