একটি টেক্সট স্ট্রিম এবং একটি শব্দ দেওয়া আছে। কাজ হল টেক্সট স্ট্রিমে ওই শব্দের অ্যানাগ্রামগুলোর উপস্থিতির সংখ্যা বের করা। অ্যানাগ্রাম হচ্ছে শব্দের অক্ষরগুলো পুনর্বিন্যাস করে বানানো নতুন শব্দ বা ফ্রেজ, যেমন "New York Times" এর অ্যানাগ্রাম "Monkeys write"।
উদাহরণ
ইনপুট: String = "workitwrokoffowkr", word = "work"
আউটপুট: স্ট্রিংতে অ্যানাগ্রামের উপস্থিতির সংখ্যা: 3
ব্যাখ্যা: "work"-এর সম্ভাব্য অ্যানাগ্রাম: work, wrok, rowk, owkr ইত্যাদি। দियेা স্ট্রিংতে উপস্থিত: work, wrok, owkr। তাই কাউন্ট ৩।
ইনপুট: String = "expresshycool", word = "Zen"
আউটপুট: স্ট্রিংতে অ্যানাগ্রামের উপস্থিতির সংখ্যা: 0
ব্যাখ্যা: "zen"-এর অ্যানাগ্রামগুলো দিয়ে স্ট্রিংতে কোনো ম্যাচ পাওয়া যায়নি।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- ক্যারেক্টার স্ট্রিম (stream) এবং শব্দ (w) ইনপুট নিয়ে
countAna(stream, w)ফাংশনে পাস করুন। - ফাংশন ভিতরে কাউন্ট ফ্ল্যাগ ইনিশিয়ালাইজ করুন।
- i=0 থেকে
stream.length() - w.length()পর্যন্ত FOR লুপ চালান। - ফাংশন ভিতরে
arrangeAna(w, stream.substring(i, i+w.length()))কল করুন যা স্ট্রিম থেকে শব্দের দৈর্ঘ্যের সাবস্ট্রিং বানাবে। arrangeAna-তে স্ট্রিংগুলো ক্যারেক্টার অ্যারেতে কনভার্ট করে সোর্ট করুন।Arrays.equals(c1, c2)দিয়ে চেক করুন সাবস্ট্রিং শব্দের সমান কিনা।- রেসপন্স true হলে কাউন্ট বাড়ান।
- মেইন মেথডে ফলাফল প্রিন্ট করুন।
উদাহরণ কোড (Java)
import java.io.*;
import java.util.*;
public class testClass {
static boolean arrangeAna(String s1, String s2) {
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
Arrays.sort(c1);
Arrays.sort(c2);
if (Arrays.equals(c1, c2)) return true;
else return false;
}
static int countAna(String stream, String w) {
int count = 0;
for (int i = 0; i <= (stream.length()) - (w.length()); i++) {
if (arrangeAna(w, stream.substring(i, i + (w.length())))) count++;
}
return count;
}
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
String stream = scan.next(); //workitwrokoffowkr
String w = scan.next(); //work
System.out.print(countAna(stream, w));
}
}
উপরের কোড রান করলে নিচের আউটপুটটি পাওয়া যাবে:
আউটপুট
Count of occurrences of anagram in the string are: 3