Ein Anagramm ist ein Wort, das durch Ummischen oder Neuanordnen der Buchstaben eines anderen Wortes entsteht; Der entscheidende Punkt bei einem Anagramm ist, dass die Buchstaben nur einmal verwendet werden dürfen und nicht im neuen Wort wiederholt werden sollten. Ein Anagramm ist ein Wort mit der gleichen Anzahl an Buchstaben. Die Zählung ist hier sehr wichtig. Ein Anagrammprogramm in Java kann auf die oben beschriebene Weise verwendet werden, indem die beiden Zeichenfolgen sortiert und verglichen werden. Wenn dies gelingt, bedeutet dies, dass es sich bei der Zeichenfolge um ein Anagramm handelt.
Starten Sie Ihren kostenlosen Softwareentwicklungskurs
Webentwicklung, Programmiersprachen, Softwaretests und andere
Algorithmus:
Lassen Sie uns einen Blick auf den Algorithmus werfen, mit dem aus einem bestimmten Wort ein Anagramm gebildet wird. Es gibt drei Möglichkeiten, ein Anagramm herauszufinden. Wir werden alle drei Möglichkeiten einzeln erklären. Der grundlegende Algorithmus besteht darin, die Längen der Zeichenfolgen zu überprüfen. Sobald die Länge gleich ist, kann sie sortiert oder gezählt und auf ein Anagramm überprüft werden.
Das erste, was wir für die gegebenen Strings tun können, ist, beide gegebenen Strings zu sortieren, die überprüft werden sollen, ob es sich um Anagramme handelt. Sobald die Sortierung abgeschlossen ist, kann sie in den sortierten Reihenfolgen verglichen werden. Die Zeitkomplexität für diese Methode beträgt O (n Logn). Der Java-Code hierfür kann wie folgt geschrieben werden:
Code:
// JAVA program to validate if two strings are anagrams import java.io.*; import java.util.Arrays; import java.util.Collections; class Main { /* Below is a function which checks if the strings are anagram */ static boolean checkAnagram(char[] strana1, char[] strana2) { // Finding lengths of strings int len1 = strana1.length; int len2 = strana2.length; // If lengths do not match then they cannot be anagrams if (len1 != len2) return false; // Sort both strings Arrays.sort(strana1); Arrays.sort(strana2); // Comparing the strings which are sorted earlier for (int i = 0; i < len1; i++) if (strana1[i] != strana2[i]) return false; return true; } /* Main program to test Anagram*/ public static void main (String args[]) { char strana1[] = { 't', 'e', 's', 't' }; char strana2[] = { 't', 't', 'e', 'w' }; if (checkAnagram(strana1, strana2)) System.out.println("The strings to be checked are" + " anagram of each other"); else System.out.println("The strings to be checked are not" + " anagram of each other"); } }
Das obige Programm prüft zunächst die Länge beider gegebener Strings. Wenn die Zeichenfolgen nicht die gleiche Länge haben, wird „false“ zurückgegeben. Nur wenn die Längen beider Zeichenfolgen gleich sind, schreitet das Programm weiter voran. Mithilfe der Array-Sortierfunktion werden die Zeichenfolgen in zwei Arrays sortiert. Sobald die Array-Sortierfunktion für beide Zeichenfolgen verwendet wird, werden die Zeichenfolgen verglichen und jeder Buchstabe wird in einer Schleife verglichen. Wenn die for-Schleife erfolgreich ist und alle Buchstaben in beiden Zeichenfolgen gleich sind, ist die Ausgabe ein Anagramm. Auch wenn ein Buchstabe nicht übereinstimmt, wird „false“ zurückgegeben. Das Hauptprogramm prüft hier die Zeichenfolgen und zeigt an, ob die Zeichenfolge ein Anagramm ist oder nicht, abhängig vom Ergebnis, das von der checkAnagram-Funktion zurückgegeben wird.
Ausgabe:
Wenn wir die Eingabe in „t“, „t“, „e“, „s“ anstelle von „w“ ändern, sieht die Ausgabe wie folgt aus.
Ausgabe:
Diese Methode kann verwendet werden, wenn die zu validierenden Zeichenfolgen klein sind. Bei dieser Methode wird davon ausgegangen, dass die gespeicherten Zeichen 8-Bit-Zeichen sind und möglicherweise 256 Zeichen gespeichert werden können. Bei dieser Methode können Sie zunächst die Zeichenfolgen mithilfe der Zählarrays mit der Größe 256 zählen und alle erforderlichen Werte im Zählarray mit 0 initialisieren. Durchlaufen Sie dieses Array und erhöhen Sie die Anzahl beim Durchlaufen. Sobald dies erledigt ist, können Sie die Zählarrays vergleichen. Wenn die Anzahl gleich ist, ist das zurückgegebene Ergebnis wahr.
Code:
import java.io.*; import java.util.*; class ANA { static int NO_CHARS = 256; /* Below is a function which checks if the strings are anagram */ static boolean isAnagram(char strana1[], char strana2[]) { // Here we create two arrays and initialize it to 0 int cnt1[] = new int[NO_CHARS]; Arrays.fill(cnt1, 0); int cnt2[] = new int[NO_CHARS]; Arrays.fill(cnt2, 0); int i; // For every character in input strings, increment the count for (i = 0; i < strana1.length && i < strana2.length; i++) { cnt1[strana1[i]]++; cnt2[strana2[i]]++; } // Checking If both strings are of different length if (strana1.length != strana2.length) return false; // Compare count arrays for (i = 0; i < NO_CHARS; i++) if (cnt1[i] != cnt2[i]) return false; return true; } /* Main program to test to check if string is Anagram or not*/ public static void main(String args[]) { char strana1[] = ("silent").toCharArray(); char strana2[] = ("lisent").toCharArray(); if (isAnagram(strana1, strana2)) System.out.println("The strings to be checked are" + " anagram of each other"); else System.out.println("The strings to be checked are not" + " anagram of each other"); } }
Ausgabe:
Anagramme können mithilfe der StringBuilder-Funktion in Java überprüft werden. Wir können die Methode deletechartAt() verwenden, um alle Zeichen zu löschen, die in der zweiten Zeichenfolge vorhanden sind.
Code:
public class Main { static void findAnagram(String str1, String str2) { String copystr1 = str1.replaceAll( " ", "").toLowerCase(); String copystr2 = str2.replaceAll(" ", "").toLowerCase(); //Setting the initial status to true boolean flag = true; if(copystr1.length() != copystr2.length()) { //If copystr1 and copystr2 do not have same length then set the flag to false flag = false; } else { //changing copystr1 to char array char[] str1Array = copystr1.toCharArray(); //Creating StringBuilder from copystr2 StringBuilder sb = new StringBuilder(copystr2); //Validating if each character of str1Array is present in string builder for (char c : str1Array) { int index = sb.indexOf(""+c); if (index != -1) { sb = sb.deleteCharAt(index); } else { //If each character is not present, setting flag to false and breaking the loop flag = false; break; } } } if(flag) { System.out.println(str1+" and "+str2+" are anagrams"); } else { System.out.println(str1+" and "+str2+" are not anagrams"); } } public static void main(String[] args) { findAnagram("Silent", "Listen"); } }
Das Programm hier verwendet das Flag und ein String-Builder-Modul, das beim Löschen zusätzlicher Zeichen hilft.
Ausgabe:
Das obige ist der detaillierte Inhalt vonAnagrammprogramm in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!