Adivina la palabra

Este problema es un problema * * interactiva nuevo a la plataforma LeetCode.

Se nos da una lista de palabras de palabras únicas, cada palabra es de 6 letras de largo, y una palabra en esta lista es elegida como secreto.

Usted puede llamar  master.guess(word) a adivinar una palabra. La palabra adivinado debe tener el tipo  string y debe estar en la lista original con 6 letras minúsculas.

Esta función devuelve un  integer tipo, que representa el número de coincidencias exactas (valor y posición) del valor aproximado a la palabra secreta. Además, si su suposición no está en la lista de palabras dado, volverá  -1 en su lugar.

Para cada caso de prueba, tiene 10 conjeturas para adivinar la palabra. Al final de cualquier número de llamadas, si se han realizado 10 o menos llamadas a  master.guess y al menos una de estas conjeturas era el secreto, se pasa el caso de prueba.

Además del caso de prueba siguiente ejemplo, habrá 5 casos de prueba adicionales, cada uno con 100 palabras en la lista de palabras. Las letras de cada palabra en aquellos casos de prueba se eligen independientemente al azar de  'a''z', tal que cada palabra en las listas de palabras dadas es único.

Example 1:
Input: secret = "acckzz", wordlist = ["acckzz","ccbazz","eiowzz","abcczz"]

Explanation:

`master.guess("aaaaaa")` returns -1, because `"aaaaaa"` is not in wordlist.
`master.guess("acckzz")` returns 6, because `"acckzz"` is secret and has all 6 matches.
`master.guess("ccbazz")` returns 3, because` "ccbazz"` has 3 matches.
`master.guess("eiowzz")` returns 2, because `"eiowzz"` has 2 matches.
`master.guess("abcczz")` returns 4, because `"abcczz"` has 4 matches.

We made 5 calls to master.guess and one of them was the secret, so we pass the test case.

Pensando: Esta pregunta se dice que tiene una matriz lista de palabras de textos, donde hay una palabra que las necesidades de adivinar la palabra secreta, ahora hay una suposición función de la API, puede devolver el número de coincidencias entre las palabras y adivinar la palabra objetivo. Ahora cada caso de prueba hay 10 oportunidades para adivinar la palabra objetivo, si el número de API no más de 10 veces llama, y ​​adivinar la palabra objetivo, entonces se puede pasar la prueba. En primer lugar, debido a la necesidad tan sólo API llamada, de manera que una llamada a una API lineal para cada palabra no es preferible, porque si la última palabra objetivo, y la longitud de palabra de la matriz de más de 10, se producirá un error. caso de que un tipo puede ser seleccionado al azar se detecta palabra, la llamada será un número CNT api, indica el número de palabras y una coincidencia entre la palabra objetivo actual. Entonces, ¿cómo hacerlo? Necesidades que se filtra de nuevo arreglo de palabras, para escribir una API función similar, devuelve el número de coincidencias entre las dos palabras, por lo que se puede filtrar toda la gama de palabras, porque oculta en claras palabras de la palabra objetivo con la palabra actual al partido de llamada el valor de retorno debe todavía CNT, por supuesto, habrá otras palabras que también vuelve CNT, pero eso está bien, todavía será capaz de filtrar una gran ola de palabras no relacionadas, repetir este paso hasta exactamente 6 parada cnt, debido a que el título lo dice una palabra la longitud es de 6,

La idea central: después de una palabra se selecciona en conjetura al azar, porque creo que es más con la respuesta correcta, entonces la palabra y luego escanear todas las palabras, el recuento misma == palabra de todo lo que el candidato elegido, por lo que no puede contar con una patada una gran cantidad de palabra, se inició con la respuesta correcta no es tan coincide con las palabras y, a continuación, seguir los pasos anteriores hasta que el recuento == 6, es decir, hasta que la longitud de palabra de 6;

/**
 * // This is the Master's API interface.
 * // You should not implement it, or speculate about its implementation
 * interface Master {
 *     public int guess(String word) {}
 * }
 */
class Solution {
    public void findSecretWord(String[] wordlist, Master master) {
        if(wordlist == null || wordlist.length == 0) {
            return;
        }
        Random random = new Random();
        int count = 0;
        List<String> wlist = Arrays.asList(wordlist);
        
        for(int i = 0, cnt = 0; i < 10 && cnt < 6; i++) {
            int n = wlist.size();
            String word = wlist.get(random.nextInt(n));
            cnt = master.guess(word);
            
            List<String> newlist = new ArrayList<>();
            for(String candidate : wlist) {
                if(getDistance(candidate, word) == cnt) {
                    newlist.add(candidate);
                } 
            }
            wlist = newlist;
        }
    }
    
    private int getDistance(String word, String target) {
        int count = 0;
        for(int i = 0; i < word.length(); i++) {
            if(word.charAt(i) == target.charAt(i)) {
                count++;
            }
        }
        return count;
    }
}

 

Publicados 673 artículos originales · alabanza ganado 13 · vistas 180 000 +

Supongo que te gusta

Origin blog.csdn.net/u013325815/article/details/105221311
Recomendado
Clasificación