Java >> Tutoriel Java >  >> Java

Programme d'anagramme en Java utilisant la liste

Programme Anagram en Java utilisant la liste | Un anagramme est les chaînes qui contiennent le même ensemble de caractères dans un ordre différent. C'est juste un réarrangement des caractères dans les mots. Voir également :- Programme Java pour l'examen du permis de conduire

Pour comprendre ce problème en détail, passons en revue quelques exemples :- "garder" et "peek", les deux mots ont les mêmes caractères mais dans un ordre différent. Autres exemples d'anagramme sont :-

  • état =goût
  • nuit =chose
  • arc =voiture
  • ennuyé =habillé
  • chat =agir
  • coude =dessous
  • pouce =menton
  • pêche =pas cher
  • se vanter =saisir

Lors de la vérification de l'anagramme, nous ignorerons la casse de la chaîne. Par conséquent, nous allons convertir la chaîne donnée en minuscules et effectuer les opérations restantes. Nous allons résoudre ce problème de 4 manières :-

  1. Programme d'anagramme en Java utilisant des tableaux
  2. Programme Anagram en Java sans utiliser Array
  3. Programme Anagram en Java utilisant List
  4. Programme Anagram en Java utilisant HashMap

Programme d'anagramme en Java utilisant des tableaux

Ici, nous allons convertir la chaîne en tableau de caractères et ensuite comparer les deux tableaux. Si les deux tableaux contiennent les mêmes éléments, alors ce sont des anagrammes.

Programme d'anagramme en Java utilisant des tableaux

import java.util.Arrays;

public class Main {

   public static void isAnagram(String string1, String string2) {
      // remove whitespace
      String str1 = string1.replaceAll("\\s", "");
      String str2 = string2.replaceAll("\\s", "");

      boolean status = true;
      if (str1.length() != str2.length()) {
         status = false;
      } else {
         // convert to array from lowercase string
         char[] arrayS1 = str1.toLowerCase().toCharArray();
         char[] arrayS2 = str2.toLowerCase().toCharArray();

         // sort arrays
         Arrays.sort(arrayS1);
         Arrays.sort(arrayS2);

         // compare arrays
         status = Arrays.equals(arrayS1, arrayS2);
      }

      if (status) {
         System.out.println(string1 + " & " + string2 
                          + " are anagrams");
      } else {
         System.out.println(string1 + " & " + string2 
                          + " are not anagrams");
      }
   }

   public static void main(String[] args) {
      isAnagram("Keep", "Peek");
      isAnagram("Know", "Program");
      isAnagram("Mother In Law", "Hitler Woman");
      isAnagram("Java", "Have");
   }
}

Sortie :

Keep &Peek sont des anagrammes
Know &Program ne sont pas des anagrammes
Belle-mère &Hitler Woman sont des anagrammes
Java &Have ne sont pas des anagrammes

Programme d'anagramme en Java sans utiliser de tableau

Nous pouvons écrire le programme d'anagramme en Java sans utiliser de tableau. Nous pouvons directement itérer la chaîne en utilisant la méthode charAt() et comparer les caractères. Voyons le programme d'anagrammes en Java sans utiliser de tableau.

Programme Anagram en Java sans utiliser de tableau

import java.util.Scanner;

public class Main {
   public static void main(String[] args) {
      Scanner scan = new Scanner(System.in);

      System.out.print("Enter First String : ");
      String str1 = scan.nextLine();

      System.out.print("Enter second String : ");
      String str2 = scan.nextLine();

      if (checkAnagram(str1, str2)) {
         System.out.println(str1 + " and " + str2 + " are anagrams");
      } else {
         System.out.println(str1 + " and " + str2 + 
                          " are not anagrams");
      }

      scan.close();
   }

   public static boolean checkAnagram(String string1, String string2) {

      string1 = string1.replaceAll("\\s", "").toLowerCase();
      string2 = string2.replaceAll("\\s", "").toLowerCase();

      if (string1.length() != string2.length()) {
         return false;
      } else {
         for (int i = 0; i < string1.length(); i++) {
            for (int j = 0; j < string2.length(); j++) {
               if (string1.charAt(i) == string2.charAt(j)) {
                  string2 = string2.substring(0, j) + 
                          string2.substring(j + 1);
                  break;
               }
            }
         }

         if (string2.length() == 0) {
            return true;
         } else {
            return false;
         }
      }
   }
}

Sortie :

Entrez la première chaîne :kep
Entrez la deuxième chaîne :pek
kep et pek sont des anagrammes

Entrez la première chaîne :cat
Entrez la deuxième chaîne :act
cat et act sont des anagrammes

Entrez la première chaîne :Java
Entrez la deuxième chaîne :Programmation
Java et Programmation ne sont pas des anagrammes

Écrire un programme d'anagramme en Java en utilisant la liste

Dans les programmes Java ci-dessus, nous avons utilisé un tableau ou sans tableau. Nous pouvons également écrire un programme d'anagrammes en Java en utilisant List. Nous allons convertir la chaîne d'origine en liste de chaînes à l'aide de la méthode split(). Si nous passons le point (".") comme paramètre à la méthode split () de la classe de chaînes, cela donne un tableau de chaînes où chaque chaîne est un caractère. Exemple :- "abcd".split(".") => {"a", "b", "c", "d"}. Nous pouvons maintenant convertir ce tableau en liste en utilisant la méthode Arrays.aslist().

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Main {

   public static void isAnagram(String string1, String string2) {
      // remove whitespace & convert to lowercase
      String str1 = string1.replaceAll("\\s", "").toLowerCase();
      String str2 = string2.replaceAll("\\s", "").toLowerCase();

      boolean status = true;
      if (str1.length() != str2.length()) {
         status = false;
      } else {
         // convert to list of string from original string
         List<String> list1 = 
               new ArrayList<String>(Arrays.asList(str1.split(".")));
         List<String> list2 = 
               new ArrayList<String>(Arrays.asList(str2.split(".")));

         // sort list
         Collections.sort(list1);
         Collections.sort(list2);

         // compare lists
         status = list1.equals(list2);
      }

      if (status) {
         System.out.println(string1 + " & " + string2 + 
                            " are anagrams");
      } else {
         System.out.println(string1 + " & " + string2 + 
                            " are not anagrams");
      }
   }

   public static void main(String[] args) {
      isAnagram("Keep", "Peek");
   }
}

Sortie :-

Keep &Peek sont des anagrammes

Programme Anagram en Java utilisant HashMap

Nous pouvons prendre l'aide de HashMap pour développer un programme d'anagramme en Java. La carte stockera le caractère en tant que clé et le nombre de caractères en tant que valeur. Nous allons stocker le nombre de caractères de la première chaîne dans la carte et soustraire le nombre de caractères de la deuxième chaîne. Enfin, map ne doit stocker que 0 comme valeur, alors seules les deux chaînes sont des anagrammes.

import java.util.HashMap;
import java.util.Set;

public class Main {
   public static boolean isAnagram(String str1, String str2) {
      str1 = str1.replaceAll("\\s", "").toLowerCase();
      str2 = str2.replaceAll("\\s", "").toLowerCase();
      if (str1.length() != str2.length()) {
         return false;
      }

      HashMap<Character, Integer> map = new HashMap<>();

      // store count of character of str1 into map
      for (int i = 0; i < str1.length(); i++) {
         if (map.containsKey(str1.charAt(i))) {
            map.put(str1.charAt(i), map.get(str1.charAt(i)) + 1);
         } else {
            map.put(str1.charAt(i), 1);
         }
      }

      // subtract count of character of str2 into map
      for (int i = 0; i < str2.length(); i++) {
         if (map.containsKey(str2.charAt(i))) {
            map.put(str2.charAt(i), map.get(str2.charAt(i)) - 1);
         }
      }

      // convert map to set 
      Set<Character> keys = map.keySet();
      // check value = 0 or not
      for (Character key : keys) {
         if (map.get(key) != 0) {
            return false;
         }
      }

      return true;
   }

   public static void main(String[] args) {
      String str1 = "listen";
      String str2 = "silent";

      if (isAnagram(str1, str2))
         System.out.print("Both strings are " + "anagram");
      else
         System.out.print("Both strings are " + "not anagram");
   }
}

Sortie :

Les deux chaînes sont des anagrammes


Balise Java