在这个问题中,我们给了字符串str和Q查询。每个查询都有一个数字X。我们的任务是创建一个程序来解决查询,以C ++的词典顺序回答第X个最小的子字符串。
我们需要为每个查询找到第Xth个字典最小的子字符串,即基于字母顺序排序,我们将不得不找到第X个子字符串。
让我们举个例子来了解这个问题,
输入:str =“ point”
Q = 4查询= {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
第二个子字符串-输入
第13个子字符串-Poin
一个简单的解决方案是生成字符串的所有可能的子字符串,将它们存储在数据结构中,然后按照字典顺序(即字母顺序)进行排序。然后对于查询中的X,我们需要从结构中打印相应的子数组。
为了存储子字符串,我们将使用向量。
#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