Los anagramas de letras efectivos

¡Continúe creando, acelere el crecimiento! Este es el sexto día de mi participación en el "Nuggets Daily New Plan · October Update Challenge", haz clic para ver los detalles del evento

prefacio

Antes, Xiao Liuliu siempre sintió que su algoritmo era relativamente malo y que era una deficiencia. Antes, realmente estaba pescando durante tres días, secando la red durante dos días y cepillando durante unos días, y luego lentamente dejé de apegarme a así que este Segundo, con la ayuda de las actividades de la plataforma, planeo comenzar a cepillarme lentamente, y también resumiré las preguntas de cepillado, hablaré sobre algunos de mis propios pensamientos y mis propias ideas, etc. Espero que pueda ser útil para mis amigos. También puedes aprovechar esta oportunidad para compensar tus deficiencias. Espero que puedas mantenerla.

colección de listas enlazadas

tema

Dadas dos cadenas s y t, escribe una función para determinar si t es un anagrama de s.

Ejemplo 1: Entrada: s = "anagrama", t = "nagaram" Salida: verdadero

Ejemplo 2: Entrada: s = "rata", t = "coche" Salida: falso

Explicación:  puede suponer que la cadena contiene solo letras minúsculas.

Ejemplo 1:

输入: s = "anagram", t = "nagaram"
输出: true
复制代码

Ejemplo 2:

输入: s = "rat", t = "car"
输出: false
复制代码

Solución violenta, bucle for de dos capas

Bueno, no escribiré esto. La idea es tener dos capas de bucles for y también registrar si los caracteres se repiten. Obviamente, la complejidad del tiempo es O(n^2).

clasificar

t es un anagrama de ss equivalente a "dos cadenas ordenadas iguales". Por lo tanto, podemos ordenar las cadenas ss y tt respectivamente y juzgar si las cadenas ordenadas son iguales. Además, si ss y tt tienen longitudes diferentes, tt no debe ser un anagrama de ss.

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        char[] str1 = s.toCharArray();
        char[] str2 = t.toCharArray();
        Arrays.sort(str1);
        Arrays.sort(str2);
        return Arrays.equals(str1, str2);
    }
}
复制代码

tabla de picadillo

Desde otro punto de vista, tt es un anagrama de ss, que equivale a "los caracteres de las dos cadenas aparecen del mismo tipo y número de veces". Dado que la cadena contiene solo 2626 letras minúsculas, podemos mantener una tabla de matriz de frecuencias con una longitud de 2626, primero recorrer la frecuencia de aparición de caracteres en la cadena de registro ss y luego recorrer la cadena tt, menos la frecuencia correspondiente en la tabla , si If [i]<0table[i]<0, significa que tt contiene un carácter extra que no está en ss, y es suficiente para devolver false.

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        int[] table = new int[26];
        for (int i = 0; i < s.length(); i++) {
            table[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            table[t.charAt(i) - 'a']--;
            if (table[t.charAt(i) - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
}
复制代码

imagen.png

Finalizar

Bueno, hoy está aquí. Soy Xiao Liuliu. ¡Pesco durante tres días y red durante dos días!

Supongo que te gusta

Origin juejin.im/post/7150294939916566564
Recomendado
Clasificación