28. LeetCode palabras de ortografía asignados a otra HashMap HashMap

título Descripción

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.

Ejemplo 1:

Entrada: palabras = [ "gato", "BT", "sombrero", "árbol"], caracteres = "ATACH"
Salida: 6
Explicación:
pueden formar una cadena "gato" y "sombrero", por lo que la respuesta es 3 + 3 = 6.


Ejemplo 2:

Entrada: palabras = [ "hola", "mundo", "leetcode"], caracteres = "welldonehoneyr"
de salida: 10
Explicación:
pueden formar una cadena "hola" y "mundo", por lo que la respuesta es 5 + 5 = 10.
 

consejos:

. 1 <= words.length <= 1,000
. 1 <= palabras [I] .length, chars.length <= 100
cartas todas las cadenas sólo son minúsculas

Ideas de resolución de problemas

Al mantener un HashMap caracteres dentro de los caracteres respectivos, como se muestra en el siguiente código como tmpMap

para ( int i = 0; i <chars.length (); i ++ ) {
             si (tmpMap.get (chars.charAt (i)) == nula ) { 
                tmpMap.put (chars.charAt (i), 1 ); 
            } Más { 
                tmpMap.put (chars.charAt (i), tmpMap.get (chars.charAt (i)) 1 ); 
            } 
        }

 

Debido a una matriz de cadenas Después de cada travesía, el mapa debe ser actualizado a la tmpMap inicial, es necesario tener en cuenta los temas asignados a otra HashMap HashMap de la

Entonces utilizar el mapa == tmpMap no puede, porque de hecho hay un punto a la misma dirección, las modificaciones que el mapa ha cambiado, tmpMap seguido también, que no puede sostener una inicial tmpMap la

1. Recomendación clone () crea un nuevo testMap

2. El valor del primer mapa de la asignación por la que atraviesa el camino hasta el segundo mapa, por lo que presiona algún mapa, 
otro mapa no cambiará. 
3. El método de la asignación de un putAll, en esencia, es un método 2.

Código es el siguiente

package leetcode;

import java.util.HashMap;
import java.util.Map;

public class CountCharacters {
     public int countCharacters(String[] words, String chars) {
        
        if (words.length==0||chars==null) {
            return 0;
        }
        Map<Character, Integer> tmpMap=new HashMap<Character, Integer>();
        for (int i = 0; i < chars.length(); i++) {
            if (tmpMap.get(chars.charAt(i))==null) {
                tmpMap.put(chars.charAt(i), 1);
            }else {
                tmpMap.put(chars.charAt(i), tmpMap.get(chars.charAt(i))+1);
            }
        }
        Map<Character, Integer> map=new HashMap<Character,Integer>();
        //这里是不能用map==tmpMap的
        map.putAll(tmpMap);
        int sumLength=0;
        for (int i = 0; i < words.length; i++) {
            
            boolean flag=true;
            for (int j = 0; j < words[i].length(); j++) {
                if (map.get(words[i].charAt(j))==null) {
                    flag=false;
                    
                }else if(map.get(words[i].charAt(j))==0){
                    flag=false;
                    
                }else {
                    map.put(words[i].charAt(j), map.get(words[i].charAt(j))-1);
                }
                
            }
            //这里是不能用map==tmpMap的
            map.putAll(tmpMap);
            if (flag) {
                sumLength+=words[i].length();
            }
            
        }
         return sumLength;

        }
     
     public static void main(String[] args) {
        CountCharacters characters=new CountCharacters();
        System.out.println(characters.countCharacters(new String[] {"cat","bt","hat","tree"}, "atach"));
    }
}

 

Supongo que te gusta

Origin www.cnblogs.com/Transkai/p/12509864.html
Recomendado
Clasificación