Anagram ialah perkataan yang dibentuk dengan merombak atau menyusun semula huruf perkataan yang berbeza; perkara penting dalam anagram ialah huruf boleh digunakan sekali sahaja dan tidak boleh diulang dalam perkataan baharu. Anagram ialah perkataan yang mempunyai bilangan huruf yang sama. Kiraan di sini sangat penting. Program anagram dalam Java boleh digunakan dalam cara di atas dengan menyusun dan membandingkan dua rentetan. Jika ini berjaya, maka ini bermakna rentetan itu ialah anagram.
Mulakan Kursus Pembangunan Perisian Percuma Anda
Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain
Algoritma:
Mari kita lihat algoritma mendapatkan anagram daripada perkataan tertentu. Terdapat tiga cara untuk mengetahui anagram. Kami akan menerangkan ketiga-tiga cara, satu demi satu. Algoritma asas terdiri daripada menyemak panjang rentetan. Setelah panjangnya sama, ia boleh diisih atau dikira dan disemak untuk mendapatkan anagram.
Perkara pertama yang boleh kita lakukan untuk rentetan yang diberikan ialah mengisih kedua-dua rentetan yang diberikan yang akan disahkan jika ia adalah anagram. Setelah pengisihan selesai, maka ia boleh dibandingkan dalam susunan yang disusun. Kerumitan masa untuk kaedah ini ialah O (n Logn). Kod Java untuk ini boleh ditulis seperti di bawah:
Kod:
// 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"); } }
Atur cara di atas mula-mula menyemak panjang kedua-dua rentetan yang diberikan. Jika rentetan tidak mempunyai panjang yang sama, maka ia akan kembali palsu. Hanya jika panjang kedua-dua rentetan adalah sama, maka program akan maju lebih jauh. Dengan menggunakan fungsi isihan tatasusunan, ia akan mengisih rentetan dalam dua tatasusunan. Setelah fungsi isihan tatasusunan digunakan pada kedua-dua rentetan, maka rentetan itu dibandingkan, dan setiap huruf dibandingkan untuk satu gelung. Jika gelung for berjaya dan semua huruf dalam kedua-dua rentetan adalah sama, maka output akan menjadi anagram. Walaupun satu huruf tidak sepadan, maka ia akan kembali palsu. Program utama di sini menyemak rentetan dan memaparkan sama ada rentetan itu adalah anagram atau tidak bergantung pada hasil yang dikembalikan oleh fungsi checkAnagram.
Output:
Jika kita menukar input kepada 't', 't', 'e', 's' dan bukannya w output akan menjadi seperti di bawah.
Output:
Kaedah ini boleh digunakan apabila rentetan di bawah pengesahan adalah kecil. Kaedah ini menganggap bahawa aksara yang disimpan adalah 8 bit dan boleh menyimpan kemungkinan 256 aksara. Dalam kaedah ini, anda boleh mengira rentetan terlebih dahulu menggunakan tatasusunan kiraan yang mempunyai saiz 256 dan memulakan semua nilai yang diperlukan dalam tatasusunan kiraan sebagai 0. Melintasi tatasusunan ini dan menambah kiraan semasa melintasi. Setelah ini selesai, anda boleh membandingkan tatasusunan kiraan. Jika kiraan adalah sama, maka keputusan yang dikembalikan adalah benar.
Kod:
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"); } }
Output:
Anagram boleh disemak dengan menggunakan fungsi StringBuilder dalam Java. Kita boleh menggunakan kaedah deletechartAt() untuk memadam sebarang aksara yang terdapat dalam rentetan kedua.
Kod:
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"); } }
Atur cara di sini menggunakan bendera dan menggunakan modul pembina rentetan yang membantu memadamkan aksara tambahan.
Output:
Atas ialah kandungan terperinci Program Anagram di Jawa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!