অ্যানাগ্রাম (Anagram) কী?
অ্যানাগ্রাম হলো একটি শব্দ বা বাক্যাংশ যেটি অন্য একটি শব্দ বা বাক্যাংশের অক্ষরগুলোকে পুনর্বিন্যাস করে তৈরি করা হয়। দুটি স্ট্রিং যদি একই অক্ষরগুলো একই সংখ্যক থাকায় অক্ষরक्रम ভিন্ন হলে, সেগুলো অ্যানাগ্রাম বলা হয়।
উদাহরণ:
- "Race" এবং "Care" - অ্যানাগ্রাম
- "Listen" এবং "Silent" - অ্যানাগ্রাম
- "Triangle" এবং "Integral" - অ্যানাগ্রাম
ইনপুট ও আউটপুট উদাহরণ
ইনপুট:
Enter the first string : Race Enter the second string : Care
আউটপুট:
The strings race and care are anagram.
অ্যালগরিদম
- প্রোগ্রাম শুরু করুন
- দুটি স্ট্রিং ভেরিয়েবল ঘোষণা করুন: my_string_1, my_string_2
- ব্যবহারকারী থেকে দুটি স্ট্রিং ইনপুট নিন
- দুটো স্ট্রিংকে toLowerCase() দিয়ে ছোট হাতের অক্ষরে কনভার্ট করুন
- দুটো স্ট্রিংয়ের দৈর্ঘ্য সমান কিনা চেক করুন (নয় হলে অ্যানাগ্রাম নয়)
- দুটো স্ট্রিংকে ক্যারেক্টার অ্যারেয়ে কনভার্ট করুন (toCharArray())
- Arrays.sort() দিয়ে দুটো অ্যারে সর্ট করুন
- Arrays.equals() দিয়ে তুলনা করুন
- ফলাফল প্রদর্শন করুন
- প্রোগ্রাম শেষ করুন
উদাহরণ ১: ব্যবহারকারী ইনপুট নেওয়া
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println("Required packages have been imported");
String my_string_1, my_string_2;
Scanner my_scanner = new Scanner(System.in);
System.out.println("A reader object has been defined");
System.out.print("Enter the first string : ");
my_string_1 = my_scanner.nextLine();
System.out.print("Enter the second string : ");
my_string_2 = my_scanner.nextLine();
my_string_1 = my_string_1.toLowerCase();
my_string_2 = my_string_2.toLowerCase();
if (my_string_1.length() == my_string_2.length()) {
char[] my_array_1 = my_string_1.toCharArray();
char[] my_array_2 = my_string_2.toCharArray();
Arrays.sort(my_array_1);
Arrays.sort(my_array_2);
boolean my_result = Arrays.equals(my_array_1, my_array_2);
if (my_result) {
System.out.println("The strings " + my_string_1 + " and " + my_string_2 + " are anagram.");
} else {
System.out.println("The strings " + my_string_1 + " and " + my_string_2 + " are not anagram.");
}
} else {
System.out.println("The strings " + my_string_1 + " and " + my_string_2 + " are not anagram.");
}
}
}
উদাহরণ ২: পূর্বনির্ধারিত মান ব্যবহার
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println("Required packages have been imported");
String my_string_1 = "Race";
String my_string_2 = "Care";
System.out.println("The two strings are defined as " + my_string_1 + " and " + my_string_2);
my_string_1 = my_string_1.toLowerCase();
my_string_2 = my_string_2.toLowerCase();
if (my_string_1.length() == my_string_2.length()) {
char[] my_array_1 = my_string_1.toCharArray();
char[] my_array_2 = my_string_2.toCharArray();
Arrays.sort(my_array_1);
Arrays.sort(my_array_2);
boolean my_result = Arrays.equals(my_array_1, my_array_2);
if (my_result) {
System.out.println("The strings " + my_string_1 + " and " + my_string_2 + " are anagram.");
} else {
System.out.println("The strings " + my_string_1 + " and " + my_string_2 + " are not anagram.");
}
} else {
System.out.println("The strings " + my_string_1 + " and " + my_string_2 + " are not anagram.");
}
}
}
কোড ব্যাখ্যা
- toLowerCase(): কেস-ইনসেনসিটিভ তুলনার জন্য
- length() চেক: দৈর্ঘ্য ভিন্ন হলে সরাসরি অ্যানাগ্রাম নয় (অপ্টিমাইজেশন)
- toCharArray(): স্ট্রিংকে ক্যারেক্টার অ্যারেয়ে রূপান্তর
- Arrays.sort(): অক্ষরগুলো সাজিয়ে দেয় যাতে সমান স্ট্রিংয়ের অ্যারে একই হয়
- Arrays.equals(): দুটি অ্যারে সমান কিনা চেক করে
সময় ও স্পেস কমপ্লেক্সিটি
| পদ্ধতি | সময় জটিলতা | স্পেস জটিলতা |
|---|---|---|
| সর্টিং পদ্ধতি (এই কোড) | O(n log n) | O(n) |
| ফ্রিকোয়েন্সি অ্যারে (26 সাইজ) | O(n) | O(1) |