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

Android-এ দুটি EditText-এর মান Anagram (অ্যানাগ্রাম) কিনা যাচাই করা

অ্যান্ড্রয়েডে অ্যানাগ্রাম (Anagram) চেক করার অ্যাপ

দুই শব্দ বা বাক্য যখন একই অক্ষরগুলো দিয়ে গঠিত কিন্তু ক্রম ভিন্ন হয়, তখন সেগুলোকে অ্যানাগ্রাম (Anagram) বলা হয়। উদাহরণ: "listen" এবং "silent"। এই টিউটোরিয়ালে দুটি EditText-এ ইনপুট নিয়ে অ্যানাগ্রাম চেক করা দেখানো হলো।

লেআউট (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="16dp"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/edit_query"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="প্রথম শব্দ লিখুন"
        android:inputType="text" />

    <EditText
        android:id="@+id/edit_query1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="দ্বিতীয় শব্দ লিখুন"
        android:inputType="text"
        android:layout_marginTop="16dp" />

    <Button
        android:id="@+id/buttonPanel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="চেক করুন"
        android:layout_marginTop="24dp"
        android:layout_gravity="center" />

</LinearLayout>

MainActivity.java - অ্যানাগ্রাম চেক লজিক

package com.example.myapplication;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    EditText editQuery, editQuery1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editQuery = findViewById(R.id.edit_query);
        editQuery1 = findViewById(R.id.edit_query1);

        findViewById(R.id.buttonPanel).setOnClickListener(v -> checkAnagram());
    }

    private void checkAnagram() {
        String first = editQuery.getText().toString().trim().toLowerCase().replaceAll("\\s+", "");
        String second = editQuery1.getText().toString().trim().toLowerCase().replaceAll("\\s+", "");

        if (first.isEmpty() || second.isEmpty()) {
            Toast.makeText(this, "দুই বক্সে মান দিন", Toast.LENGTH_SHORT).show();
            return;
        }

        if (areAnagrams(first, second)) {
            Toast.makeText(this, "✅ এটি একটি অ্যানাগ্রাম!", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(this, "❌ এটি অ্যানাগ্রাম নয়", Toast.LENGTH_LONG).show();
        }
    }

    // অপ্টিমাইজড অ্যানাগ্রাম চেক: ক্যারেক्टर কাউন্ট ব্যবহার করে O(n) টাইম কমপ্লেক্সিটি
    private boolean areAnagrams(String s1, String s2) {
        if (s1.length() != s2.length()) return false;

        int[] charCount = new int[26]; // a-z এর জন্য

        for (int i = 0; i < s1.length(); i++) {
            char c1 = s1.charAt(i);
            char c2 = s2.charAt(i);
            if (c1 >= 'a' && c1 <= 'z') charCount[c1 - 'a']++;
            if (c2 >= 'a' && c2 <= 'z') charCount[c2 - 'a']--;
        }

        for (int count : charCount) {
            if (count != 0) return false;
        }
        return true;
    }
}

অ্যালগরিদম ব্যাখ্যা

  • নিবিড় পদ্ধতি (O(n²)): প্রতিটি ক্যারেক্টারের জন্য দূরتی স্ট্রিংে সার্চ (মূল কোডে ছিল)
  • সর্টিং পদ্ধতি (O(n log n)): দুটি স্ট্রিং সর্ট করে তুলনা
  • ক্যারেক্টার কাউন্ট (O(n)) - সেরা: অ্যারে ব্যবহার করে প্রতিটি অক্ষরের ফ্রিকোয়েন্সি গুনে তুলনা

উন্নত সংস্করণ (Unicode সাপোর্ট সহ)

private boolean areAnagramsAdvanced(String s1, String s2) {
    if (s1.length() != s2.length()) return false;

    // HashMap ব্যবহার করে যেকোনো Unicode ক্যারেক্টার হ্যান্ডেল করুন
    java.util.Map<Character, Integer> map = new java.util.HashMap<>();

    for (char c : s1.toCharArray()) {
        map.put(c, map.getOrDefault(c, 0) + 1);
    }
    for (char c : s2.toCharArray()) {
        int count = map.getOrDefault(c, 0);
        if (count == 0) return false;
        map.put(c, count - 1);
    }
    return true;
}

Android-এ দুটি EditText-এর মান Anagram (অ্যানাগ্রাম) কিনা যাচাই করা

  1. অ্যান্ড্রয়েড অ্যাপে লোকেশন সার্ভিস সক্রিয় কিনা যাচাই করার পদ্ধতি

  2. অ্যান্ড্রয়েডে EditText খালি কিনা চেক করার পদ্ধতি

  3. Android-এ TextView-এ টেক্সট জাস্টিফাই (Justify) করার পদ্ধতি

  4. Android-এ SharedPreferences ব্যবহার করে ডেটা সংরক্ষণ, পঠন এবং সম্পাদনা