[Una pregunta del día] Likou 387: El primer carácter único de una cadena

Descripción del título ( portal )

Dada una cadena, busque su primer carácter único y devuelva su índice. Si no existe, se devuelve -1.

Ejemplo

s = "leetcode"
返回 0

s = "loveleetcode"
返回 2

Ideas

Matriz bidimensional

Prepare un arreglo bidimensional de 26 * 2 y trátelo como una matriz. La primera fila almacena el subíndice de cada letra de la cadena correspondiente a su posición en la cadena, y la segunda fila almacena el número de apariciones de la misma. Este también es el primero en hacer un bucle for.
El segundo bucle for atraviesa la segunda fila de la matriz y devuelve el subíndice de la primera fila cuando el número es 1.

 public int firstUniqChar(String s) {
    
    

        //char[] array = s.toCharArray();
        int[][] index = new int[26][2];
        for (int i = 0; i < s.length(); i++) {
    
    
            index[s.charAt(i) - 'a'][0] = i;
            index[s.charAt(i) - 'a'][1] = index[s.charAt(i) - 'a'][1] + 1;
        }
        for (int i = 0; i < s.length(); i++) {
    
    
            if (index[s.charAt(i)-'a'][1] == 1) {
    
    
                return index[s.charAt(i)-'a'][0];
            }
        }
        return -1;

    }

HashMap

Cuente el número de ocurrencias a través de la tabla hash y luego recorra para encontrar

public int firstUniqChar(String s) {
    
    
        Map<Character, Integer> map = new HashMap();
        char[] chars = s.toCharArray();
        //先统计每个字符的数量
        for (char ch : chars) {
    
    
            map.put(ch, map.getOrDefault(ch, 0) + 1);
        }
        //然后在遍历字符串s中的字符,如果出现次数是1就直接返回
        for (int i = 0; i < s.length(); i++) {
    
    
            if (map.get(chars[i]) == 1) {
    
    
                return i;
            }
        }
        return -1;
    }


indexOf && lastIndexOf API

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

 public int firstUniqChar(String s) {
    
    
        for (int i = 0; i < s.length(); i++) {
    
    
            if (s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))) {
    
    
                return i;
                }
        }
        return -1;
    }

Supongo que te gusta

Origin blog.csdn.net/weixin_45532227/article/details/111582591
Recomendado
Clasificación