Tener problemas para usar un HashMap con cadenas e ints en Java

Estoy trabajando en una solución a un problema Java muy común que involucra cadenas. Me gustaría escribir un método para ver si una cadena es una permutación (anagrama) de otra.

Mi solución es esta: estoy escribiendo un método que toma dos cadenas. I iterar a través de una cadena y poner los caracteres que se encuentran en un HashMap, donde la clave es la letra, y el valor es el número de apariciones de esa letra, como int. Una vez que termino de iterar a través de la primera Cadena, repito a través de la segunda Cadena y disminuyo los valores de cada carácter que se encuentra en el mismo HashMap.

Una vez que una clave llega a cero, elimino el par clave / valor por completo del HashMap. Una vez que termine de iterar a través de la segunda Cadena, simplemente verifico si HashMap está vacío. Si es así, las dos cadenas son permutaciones / anagramas entre sí; de lo contrario, el método devuelve falso.

Mi método es el siguiente:

public boolean checkPermutation (String stringA, String stringB) {

        if (stringA.length() != stringB.length()) {

            return false;

        }

        else {


        HashMap alpha = new HashMap();

        for (int i = 0; i < stringA.length(); i++) {

            if (!alpha.containsKey(stringA.charAt(i))) {

                alpha.put(stringA.charAt(i), 0);
            }

            else {

                Integer value = (Integer) alpha.get(stringA.charAt(i));
                int newValue = value.intValue();
                alpha.put(stringA.charAt(i), newValue++);

            }

        }

        for (int j = 0; j < stringB.length(); j++) {

            if (alpha.containsKey(stringB.charAt(j))) {

                Integer value = (Integer) alpha.get(stringA.charAt(j));
                int newValue = value.intValue();//null pointer exception here

                if (newValue > 1) {

                    alpha.put(stringB.charAt(j), newValue--);

                }

                else {

                    alpha.remove(stringB.charAt(j));

                }

            }

        }

        if (alpha.isEmpty())
            return true;

        else
            return false;


        }
    }

Mi problema es que mi solución distingue entre mayúsculas y minúsculas (es decir, si ingreso "Hola" y "oellH", obtengo una excepción de puntero nulo). Me gustaría hacer que esta solución no distinga entre mayúsculas y minúsculas, y descubrir por qué obtengo una excepción de puntero nulo. ¿Alguien puede ver lo que estoy haciendo mal?

Como una pregunta de seguimiento menor, ¿es una solución de este tipo O (n) a pesar de que hay dos bucles for?

Respuesta 1
Integer value = (Integer) alpha.get(stringA.charAt(j));

Intente cambiar la cadena A a la cadena B.

Integer value = (Integer) alpha.get(stringB.charAt(j));

Porque si le das una Cadena diferente que no tiene los mismos caracteres, el valor será nulo y lo hará a través de NPE.

Cambie ambas cadenas a minúsculas o mayúsculas.

stringA= stringA.toLowercase();
stringB= stringB.toLowercase();
Respuesta: 2

Estoy tratando de seleccionar un quinto o sexto nieto que no tenga ningún otro atributo que no sea el nombre de la clase. Por favor, consulte el siguiente ejemplo DOM. <div id = "abc abc abc"> <a> <a> ...

Suponga que un objeto modelo de Car (como clase de caso), inmutable y creado utilizando un patrón de construcción. (Patrón de constructor de Joshua Bloch). Su método de construcción llama a un objeto CarValidator para permitir la creación o ...

Cuando intenté establecer el resultado de mi programa en textView en un cuadro de diálogo, la aplicación se cerró. Hice el cuadro de diálogo vinculando un xml que tiene una vista de texto y es esta vista de texto la que intenté ...

Este pequeño programa no supera el resultado esperado. ¡Eche un vistazo y vea si puede ayudar por favor! public static void main (String [] args) {Entrada del escáner = nuevo escáner (System.in); Cuerda ...