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

C++-এ কোয়েরি: X-তম লেক্সিকোগ্রাফিক্যালি ছোট সাবস্ট্রিং বের করা


এই সমস্যায়, আমাদের একটি স্ট্রিং str এবং Q কোয়েরি দেওয়া আছে। প্রতিটি কোয়েরিতে একটি সংখ্যা X থাকে। আমাদের কাজ হল X-তম লেক্সিকোগ্রাফিক্যালি (শব্দকোষ ক্রমে) ছোট সাবস্ট্রিং বের করার কোয়েরি সমাধান করার প্রোগ্রাম তৈরি করা।

সমস্যা বর্ণনা

আমাদের X-তম লেক্সিকোগ্রাফিক্যালি ছোট সাবস্ট্রিং বের করতে হবে অর্থাৎ অ্যালফাবেটিক্যালি সর্ট করে X-তম সাবস্ট্রিং খুঁজে বের করতে হবে।

উদাহরণ দিয়ে বোঝা যাক

ইনপুট: str = "point"

Q = 4 query = {4, 7, 2, 13}

আউটপুট: n, oi, in, poin

ব্যাখ্যা

str-এর সকল সাবস্ট্রিং লেক্সিকোগ্রাফিক্যালি সর্ট করা অবস্থায় -

i, in, int, n, nt, o, oi, oin, oint, p, po, poi, poin, point, t

৪র্থ সাবস্ট্রিং - n

৭ম সাবস্ট্রিং - oi

২য় সাবস্ট্রিং - in

১৩তম সাবস্ট্রিং - poin

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

একটি সহজ সমাধান হল স্ট্রিং-এর সকল সম্ভাব্য সাবস্ট্রিং জেনারেট করা, সেগুলো একটি ডেটা স্ট্রাকচারে সংরক্ষণ করা, এবং তারপর সেগুলো লেক্সিকোগ্রাফিক্যালি অর্ডারে সর্ট করা। তারপর কোয়েরির X অনুযায়ী সংশ্লিষ্ট সাবঅ্যারে প্রিন্ট করা।

সাবস্ট্রিং সংরক্ষণের জন্য ভেক্টর (vector) ব্যবহার করা হবে।

C++ প্রোগ্রাম উদাহরণ

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

vector<string> substrings;

void find_SortSubstrings(string s) {
    int len = s.size();
    for (int i = 0; i < len; i++) {
        string dup = "";
        for (int j = i; j < len; j++) {
            dup += s[j];
            substrings.push_back(dup);
        }
    }
    sort(substrings.begin(), substrings.end());
}

int main(){
    string str = "point";
    find_SortSubstrings(str);
    int Q = 4;
    int query[] = { 4, 9, 5, 15 };
    for (int i = 0; i < Q; i++)
        cout<<"Query "<<(i+1)<<" : The "<<query[i]<<"th smallest sub-string lexicographically is "<<substrings[query[i] - 1] << endl;
    return 0;
}

আউটপুট

Query 1 : The 4th smallest sub-string lexicographically is n
Query 2 : The 9th smallest sub-string lexicographically is oint
Query 3 : The 5th smallest sub-string lexicographically is nt
Query 4 : The 15th smallest sub-string lexicographically is t
  1. C++-এ মেজ সমস্যা: বল দিয়ে পথ খুঁজে বের করা

  2. C++-এ সবচেয়ে গভীর নোডগুলো ধারণকারী ছোটতম সাবট্রি

  3. লিনাক্সে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)

  4. উইন্ডোজে C++-এর জন্য সেরা IDE কী? (আলাদা লেখা)