কম্পিউটার

C++ এ সাবস্ট্রিং-এ অক্ষরের ফ্রিকোয়েন্সির জন্য প্রশ্ন


এই সমস্যা, আমরা একটি স্ট্রিং দেওয়া হয়. এবং Q প্রশ্নগুলির প্রতিটিতে দুটি পূর্ণসংখ্যা l এবং r এবং অক্ষর ch আছে। আমাদের কাজ হল C++ এ সাবস্ট্রিং-এ অক্ষরের ফ্রিকোয়েন্সিগুলির জন্য প্রশ্নের সমাধান করার জন্য একটি প্রোগ্রাম তৈরি করা।

সমস্যা বর্ণনা :এখানে প্রতিটি প্রশ্নের জন্য, আমরা str[l...r] সাবস্ট্রিং-এ 'ch' অক্ষরের সংঘটনের ফ্রিকোয়েন্সি খুঁজে পাব।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

str = “tutorialspoint”
Q = 2
0 6 t
5 13 i

আউটপুট

2 2

ব্যাখ্যা

ক্যোয়ারী 1 এর জন্য − সাবস্ট্রিংটি হল "টিউটোরিয়া", অক্ষরটি 2 বার প্রদর্শিত হয়৷

কোয়েরি 2 এর জন্য − সাবস্ট্রিং হল "ialspoint", অক্ষর i 2 বার প্রদর্শিত হয়

সমাধান পদ্ধতি

সমস্যা সমাধানের সহজ এবং সোজা পথ হল প্রতিটি কোয়েরির জন্য l থেকে r পর্যন্ত স্ট্রিং ট্র্যাভার্স করা এবং স্ট্রিংটিতে হ্যারাক্টার ch এর উপস্থিতি গণনা করা।

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include <bits/stdc++.h>
using namespace std;

struct Query{
   int l, r;
   char ch;
};
int CalcCharFreq(string str, Query queries){
   int count = 0;
   for(int i = queries.l; i < queries.r; i++){
      if(str[i] == queries.ch )
      count++;
   }
   return count;
}

int main(){
   string str = "tutorialspoint";
   int Q = 2;
   Query queries[Q];
   queries[0].l = 0;
   queries[0].r = 5;
   queries[0].ch = 't';
   queries[1].l = 5;
   queries[1].r = 13;
   queries[1].ch = 'i';
   for(int i = 0; i<Q; i++)
   cout<<"For Query "<<(i+1)<<": The frequency of occurrence of character '"<<queries[i].ch<<"' is "<<CalcCharFreq(str, queries[i])<<"\n";
   return 0;
}

আউটপুট

For Query 1: The frequency of occurrence of character 't' is 2
For Query 2: The frequency of occurrence of character 'i' is 2

অন্য পদ্ধতি প্রি-কম্পিউটেড অ্যারে ব্যবহার করে সমস্যাটি সমাধান করা হয়। এখানে, আমরা একটি 2D অ্যারে তৈরি করব যা সেই নির্দিষ্ট সূচক পর্যন্ত অক্ষরের ফ্রিকোয়েন্সি সংরক্ষণ করবে অর্থাৎ freq[3][2] অক্ষরের ফ্রিকোয়েন্সি 'c' সূচক 2 এ সংরক্ষণ করবে। প্রাথমিকভাবে, সমস্ত ফ্রিকোয়েন্সি 0।

তারপরে, আমরা প্রতিটি সূচক মানতে অক্ষরের ফ্রিকোয়েন্সি প্রাক-গণনা করব। এর পরে, আমরা সূচী l-এ সংঘটনের ফ্রিকোয়েন্সি বিয়োগ করে রেঞ্জে অক্ষরের ফ্রিকোয়েন্সি খুঁজে পাব যেটি সূচক r থেকে।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
int charFreq[100][26];

struct Query{
   int l, r;
   char ch;
};

void countCharFreq(string str, int size){

   memset(charFreq, 0, sizeof(int));
   for (int i = 0; i < size; i++){
      charFreq[i][str[i] - 'a']++;
   }
   for (int i = 1; i < size; i++) {
      for (int j = 0; j < 26; j++)
      charFreq[i][j] += charFreq[i - 1][j] ;
   }
}


int CalcCharFreq(Query queries){
   return charFreq[queries.r][queries.ch - 'a'] - charFreq[queries.l][queries.ch - 'a'];
}

int main(){
   string str = "tutorialspoint";
   int size = str.length();
   int Q = 2;
   countCharFreq(str, size);
   Query queries[Q];
   queries[0].l = 1;
   queries[0].r = 13;
   queries[0].ch = 't';
   queries[1].l = 4;
   queries[1].r = 13;
   queries[1].ch = 'i';
   for(int i = 0; i<Q; i++)
   cout<<"For Query "<<(i+1)<<": The frequency of occurrence of character '"<<queries[i].ch<<"' is "   <<CalcCharFreq( queries[i])<<"\n";
   return 0;
}

আউটপুট

For Query 1: The frequency of occurrence of character 't' is 2
For Query 2: The frequency of occurrence of character 'i' is 2

  1. একটি গাছে একটি সাবট্রির ডিএফএসের জন্য C++ প্রশ্ন

  2. C++ এ সংযোগ বিচ্ছিন্ন গ্রাফের জন্য BFS

  3. Pigeonhole সাজানোর জন্য C++ প্রোগ্রাম?

  4. আপডেট ছাড়া রেঞ্জ সমষ্টি প্রশ্নের জন্য C++ প্রোগ্রাম?