এই প্রোগ্রামিং সমস্যায়, আমাদের দুটি স্ট্রিং দেওয়া হয়। এবং আমাদের স্ট্রিং-এর সমস্ত অক্ষর খুঁজে বের করতে হবে যেগুলি উভয় স্ট্রিং-এ সাধারণ এবং আমাদের এই সাধারণ অক্ষরগুলিকে বর্ণানুক্রমিকভাবে প্রিন্ট করতে হবে . এবং প্রিন্ট করুন ‘কোন সাধারণ অক্ষর নেই’ পাওয়া যায় যদি কোন সাধারণ অক্ষর না আসে। প্রদত্ত যে স্ট্রিংটিতে সমস্ত ছোট হাতের বর্ণমালা নেই৷
৷একটি উদাহরণ নেওয়া যাক -
Input : string1 : adsfhslf string2 : fsrakf Output : affs
ব্যাখ্যা − দুটি স্ট্রিং এর মধ্যে a, f, s আছে। তাই অভিধানের আউটপুট হল 'afs'।
Input : string1 : abcde string2 : glhyte Output : No common characters
ব্যাখ্যা − কোন অক্ষর মিল নেই৷
৷এই সমস্যাটি সমাধান করার জন্য, আমাদের স্ট্রিংটিতে সাধারণ অক্ষরগুলি খুঁজে বের করতে হবে। এবং আউটপুট এই স্ট্রিং এর অভিধানিক ক্রম হবে।
অ্যালগরিদম
এই সমস্যা সমাধানের অ্যালগরিদম হল −
Step 1 : Create two arrays a1[] and a2[] of size 26 each for counting the number of alphabets in the strings string1 and string2. Step 2 : traverse a1[] and a2[]. and in sequence print all those numbers that have values in the array.
উদাহরণ
চলুন এই অ্যালগরিদমের উপর ভিত্তি করে একটি প্রোগ্রাম তৈরি করি যাতে কাজটি বোঝানো হয় −
#include<bits/stdc++.h>
using namespace std;
int main(){
string string1 = "adjfrdggs";
string string2 = "gktressd";
cout<<"The strings are "<<string1<<" and "<<string2;
cout<<"\nThe common characters are : ";
int a1[26] = {0};
int a2[26] = {0};
int i , j;
char ch;
char ch1 = 'a';
int k = (int)ch1, m;
for(i = 0 ; i < string1.length() ; i++){
a1[(int)string1[i] - k]++;
}
for(i = 0 ; i < string2.length() ; i++){
a2[(int)string2[i] - k]++;
}
for(i = 0 ; i < 26 ; i++){
if (a1[i] != 0 and a2[i] != 0){
for(j = 0 ; j < min(a1[i] , a2[i]) ; j++){
m = k + i;
ch = (char)(k + i);
cout << ch;
}
}
}
return 0;
} আউটপুট
The strings are adjfrdggs and gktressd The common characters are : dgrs