Anagrama de comprobación de errores lógicos - parece que no puede encontrar el error

SIMPLEGUY :
public class AnagramUnoptimized {
  public static void main(String[] args) {

    String a  = "good";
    String b  = "ogod";
    boolean isAnagram = false;

    String c = a.toLowerCase();
    String d = b.toLowerCase();

    if(c.length()==d.length()) {
        boolean [] Visited = new boolean[a.length()];
        for (int i = 0; i < c.length(); i++) {
            isAnagram = false;
            for (int j = 0; j < d.length(); j++) {
                if (c.charAt(i) == d.charAt(j) && Visited[j]==false) {
                    isAnagram = true;
                    Visited[j] = true;
                }
            }
            if (isAnagram == false) {
                break;
            }
        }
    }
    if(isAnagram==true){
        System.out.println("The given Strings are Anagrams");
    }
    else{
        System.out.println("The given Strings are not Anagrams");
    }

  }
}

He utilizado una matriz booleana Visitado para comprobar si los elementos repetidos, pero su ahora mostrando "No anagrama" para todas las entradas ....

¿Me puede decir lo que su muestra "No anagrama" si las cadenas han repetición de elementos ??

Arvind Kumar Avinash:

El problema con el código es va a proseguir con el bucle incluso cuando visited[j]se cambia a truemientras que usted necesita para romper el bucle interior en este punto. Hacerlo de la siguiente manera:

for (int j = 0; j < d.length(); j++) {
    if (c.charAt(i) == d.charAt(j) && visited[j] == false) {
        isAnagram = true;
        visited[j] = true;
        break;
    }
}

La salida después de este cambio:

The given Strings are Anagrams

Una mejor manera de hacerlo sería como sigue:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String a = "good";
        String b = "ogod";

        char[] first = a.toLowerCase().toCharArray();
        char[] second = b.toLowerCase().toCharArray();
        Arrays.sort(first);
        Arrays.sort(second);

        boolean isAnagram = Arrays.equals(first, second);

        if (isAnagram == true) {
            System.out.println("The given Strings are Anagrams");
        } else {
            System.out.println("The given Strings are not Anagrams");
        }
    }
}

Salida:

The given Strings are Anagrams

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=279651&siteId=1
Recomendado
Clasificación