Android-এ স্ট্রিং অ্যারে থেকে কমন (Common) ক্যারেক্টার সরিয়ে ফেলা
এই টিউটোরিয়ালে আমরা দেখব কিভাবে একটি স্ট্রিং অ্যারেতে থাকা সব স্ট্রিংয়ের কমন ক্যারেক্টারগুলো চিহ্নিত করে সেগুলো সরিয়ে ফেলা যায়। মূল লজিক: যেসব ক্যারেক্টার একাধিকবার আবির্ভূত হয়েছে (সর্বোচ্চ ফ্রিকোয়েন্সি), সেগুলো "কমন" ধরে রিমুভ করা হয়।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio → File → New Project → প্রয়োজনীয় ডিটেইলস পূরণ করুন।
ধাপ ২: লেআউট ফাইল (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context=".MainActivity">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="30sp"
android:gravity="center" />
</LinearLayout>
ধাপ ৩: MainActivity.java (বাগ-ফিক্সড ও সংশোধিত সংস্করণ)
package com.example.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.widget.TextView;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import java.util.*;
public class MainActivity extends AppCompatActivity {
@RequiresApi(api = Build.VERSION_CODES.P)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String[] strArray = {"aaa", "aaa", "bbb", "ccc", "bbb"};
// ১. সব স্ট্রিংয়ের ক্যারেক্টার ফ্রিকোয়েন্সি কাউন্ট
Map<Character, Integer> charFreq = new HashMap<>();
for (String s : strArray) {
for (char c : s.toCharArray()) {
charFreq.put(c, charFreq.getOrDefault(c, 0) + 1);
}
}
// ২. সর্বোচ্চ ফ্রিকোয়েন্সি বের করুন
int maxFreq = Collections.max(charFreq.values());
// ৩. কমন ক্যারেক্টারগুলো (যাদের ফ্রিকোয়েন্সি = maxFreq) চিহ্নিত করুন
Set<Character> commonChars = new HashSet<>();
for (Map.Entry<Character, Integer> entry : charFreq.entrySet()) {
if (entry.getValue() == maxFreq) {
commonChars.add(entry.getKey());
}
}
// ৪. প্রতিটি স্ট্রিং থেকে কমন ক্যারেক্টার সরিয়ে ফেলুন
List<String> resultList = new ArrayList<>();
for (String s : strArray) {
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (!commonChars.contains(c)) {
sb.append(c);
}
}
resultList.add(sb.toString());
}
TextView textView = findViewById(R.id.text);
textView.setText("কমন ক্যারেক্টার: " + commonChars + "\nফলাফল: " + resultList);
}
}
মূল কোডের সমস্যা ও সমাধান:
- মূল কোডে
HashMapString, Integer>সিনট্যাক্স এরর ছিল। - লজিকুল ত্রুটি: স্ট্রিং ফ্রিকোয়েন্সি বের করে ক্যারেক্টার লেভেলে কাজ করা হয়নি।
- এখানে সরাসরি ক্যারেক্টার ফ্রিকোয়েন্সি কাউন্ট করে কমন ক্যারেক্টার বের করা হয়েছে।
ফলাফল
ইনপুট: ["aaa", "aaa", "bbb", "ccc", "bbb"]
ক্যারেক্টার ফ্রিকোয়েন্সি: a=6, b=6, c=3
সর্বোচ্চ ফ্রিকোয়েন্সি: ৬ → কমন ক্যারেক্টার: {a, b}
প্রতিটি স্ট্রিং থেকে 'a' এবং 'b' সরিয়ে ফেলা:
- "aaa" → "" (খালি)
- "bbb" → "" (খালি)
- "ccc" → "ccc" (অপরিবর্তিত)
ফাইনাল আউটপুট: ["", "", "ccc", "ccc", ""]

সারসংক্ষেপ
ক্যারেক্টার লেভেলে ফ্রিকোয়েন্সি কাউন্ট → সর্বোচ্চ ফ্রিকোয়েন্সি বের করা → সেই ক্যারেক্টারগুলো সব স্ট্রিং থেকে রিমুভ করা। এটি O(N*L) টাইম কমপ্লেক্সিটিতে কাজ করে (N = স্ট্রিং সংখ্যা, L = গড় দৈর্ঘ্য)।