কম্পিউটার টিউটোরিয়াল

জাভা প্রোগ্রাম: দুটি স্ট্রিং অ্যানাগ্রাম (Anagram) কিনা চেক করা

অ্যানাগ্রাম (Anagram) কী?

অ্যানাগ্রাম হলো একটি শব্দ বা বাক্যাংশ যেটি অন্য একটি শব্দ বা বাক্যাংশের অক্ষরগুলোকে পুনর্বিন্যাস করে তৈরি করা হয়। দুটি স্ট্রিং যদি একই অক্ষরগুলো একই সংখ্যক থাকায় অক্ষরक्रम ভিন্ন হলে, সেগুলো অ্যানাগ্রাম বলা হয়।

উদাহরণ:

  • "Race" এবং "Care" - অ্যানাগ্রাম
  • "Listen" এবং "Silent" - অ্যানাগ্রাম
  • "Triangle" এবং "Integral" - অ্যানাগ্রাম

ইনপুট ও আউটপুট উদাহরণ

ইনপুট:

Enter the first string : Race
Enter the second string : Care

আউটপুট:

The strings race and care are anagram.

অ্যালগরিদম

  1. প্রোগ্রাম শুরু করুন
  2. দুটি স্ট্রিং ভেরিয়েবল ঘোষণা করুন: my_string_1, my_string_2
  3. ব্যবহারকারী থেকে দুটি স্ট্রিং ইনপুট নিন
  4. দুটো স্ট্রিংকে toLowerCase() দিয়ে ছোট হাতের অক্ষরে কনভার্ট করুন
  5. দুটো স্ট্রিংয়ের দৈর্ঘ্য সমান কিনা চেক করুন (নয় হলে অ্যানাগ্রাম নয়)
  6. দুটো স্ট্রিংকে ক্যারেক্টার অ্যারেয়ে কনভার্ট করুন (toCharArray())
  7. Arrays.sort() দিয়ে দুটো অ্যারে সর্ট করুন
  8. Arrays.equals() দিয়ে তুলনা করুন
  9. ফলাফল প্রদর্শন করুন
  10. প্রোগ্রাম শেষ করুন

উদাহরণ ১: ব্যবহারকারী ইনপুট নেওয়া

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))

public static boolean isAnagram(String s1, String s2) {
    if (s1.length() != s2.length()) return false;
    
    int[] freq = new int[26];
    s1 = s1.toLowerCase();
    s2 = s2.toLowerCase();
    
    for (int i = 0; i < s1.length(); i++) {
        freq[s1.charAt(i) - 'a']++;
        freq[s2.charAt(i) - 'a']--;
    }
    
    for (int count : freq) {
        if (count != 0) return false;
    }
    return true;
}

বাস্তব জীবনে প্রয়োগ

  • ওয়ার্ড গেম (Scrabble, Boggle)
  • ক্রিপ্টোগ্রাফি ও কোড ব্রেকিং
  • ডেটা ডি-ডুপ্লিকেশন
  • ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং
  1. Python-এ দুটি স্ট্রিং একে অপরের অ্যানাগ্রাম কিনা যাচাই করা

  2. পাইথনে দুটি সংখ্যার বাইনারি রিপ্রেজেন্টেশন অ্যানাগ্রাম (Anagram) কিনা

  3. পাইথনে দুটি স্ট্রিং ০ বা ১ এডিট ডিস্ট্যান্সে আছে কিনা যাচাই করার প্রোগ্রাম

  4. পাইথনে দুটি সংখ্যার বাইনারি রিপ্রেজেন্টেশন অনুগ্রাম (anagram) কিনা যাচাই করা

কপিরাইট © https://bd.wsxdn.com সমস্ত অধিকার সংরক্ষিত
পদ্ধতিসময় জটিলতাস্পেস জটিলতা
সর্টিং পদ্ধতি (এই কোড)O(n log n)O(n)
ফ্রিকোয়েন্সি অ্যারে (26 সাইজ)O(n)O(1)