【】 LeetCode Palabras 1160. Encuentro que puede estar formado por caracteres 拼写 单词 (Fácil) (Java)

【】 LeetCode Palabras 1160. Encuentro que puede estar formado por caracteres 拼写 单词 (Fácil) (Java)

Tema Dirección: https://leetcode.com/problems/find-words-that-can-be-formed-by-characters/

Descripción Asunto:

Se le da una matriz de cadenas palabras y caracteres de una cadena.

Una cadena es bueno si puede estar formado por caracteres de caracteres (cada carácter sólo puede ser usado una vez).

Devolver la suma de las longitudes de todas las cadenas en buenas palabras.

Ejemplo 1:

Input: words = ["cat","bt","hat","tree"], chars = "atach"
Output: 6
Explanation: 
The strings that can be formed are "cat" and "hat" so the answer is 3 + 3 = 6.

Ejemplo 2:

Input: words = ["hello","world","leetcode"], chars = "welldonehoneyr"
Output: 10
Explanation: 
The strings that can be formed are "hello" and "world" so the answer is 5 + 5 = 10.

Nota:

1. 1 <= words.length <= 1000
2. 1 <= words[i].length, chars.length <= 100
3. All strings contain lowercase English letters only.

Sujeto al efecto

darle una cuerda) (caracteres palabras "Glosario" (matriz de cadenas) y un "alfabeto".

Si usted puede escribir palabras en una "palabra" (cadena) los caracteres de la "letra" (carácter), entonces pensamos que ha dominado la palabra.

Nota: Cada vez que el deletreo, char de cada letra sólo puede ser usado una vez.

Regresar palabras de vocabulario en todas las palabras que ha dominado la suma de las longitudes.

Enfoque de resolución de problemas

1, el número de atravesar los caracteres de grabación dentro de cada letra
2, atravesando cada letra de cada palabra, para confirmar si el número de letras de los caracteres de rango

class Solution {
    public int countCharacters(String[] words, String chars) {
        int[] count = new int[26];
        for (int i = 0; i < chars.length(); i++) {
            count[chars.charAt(i) - 'a']++;
        }
        int res = 0;
        for (int i = 0; i < words.length; i++) {
            int[] temp = count.clone();
            int j = 0;
            for (; j < words[i].length(); j++) {
                int cur = words[i].charAt(j) - 'a';
                temp[cur]--;
                if (temp[cur] < 0) break;
            }
            if (j == words[i].length()) res += words[i].length();
        }
        return res;
    }
}

Cuando la ejecución: 9 ms, venció el 72,91% de todos los usuarios a presentar en Java
consumo de memoria: 42,1 MB, batir el 5,08% de todos los usuarios a presentar en Java

Publicado 81 artículos originales · ganado elogios 6 · vistas 2263

Supongo que te gusta

Origin blog.csdn.net/qq_16927853/article/details/104914310
Recomendado
Clasificación