第K小子串
输入一个字符串 s,s 由小写英文字母组成,保证 s 长度小于等于 5000 并且大于等于 1。在 s 的所有不同的子串中,输出字典序第 k 小的字符串。
字符串中任意个连续的字符组成的子序列称为该字符串的子串。
字母序表示英文单词在字典中的先后顺序,即先比较第一个字母,若第一个字母相同,则比较第二个字母的字典序,依次类推,则可比较出该字符串的字典序大小。
输入:
第一行输出一个字符串 s,保证 s 长度小于等于 5000 大于等于 1。
第二行一个整数 k (1<= k <= 5),保证 s 不同子串个数大于等于 k。
输出:
输出一个字符串表示答案。
这道题数据量不大,直接暴力枚举,利用set本身的有序性
#include <iostream>
#include <set>
using namespace std;
int main() {
string str;
cin >> str;
int k;
cin >> k;
set<string> s;
for (int i = 0; i < str.size(); i++) {
for (int j = i; j < str.size(); j++) {
if (j - i + 1 > k) {
break;
}
string t = str.substr(i, j - i + 1);
// cout << t << endl;
s.insert(t);
if (s.size() > k) {
s.erase(--s.end());
}
}
}
cout << *(--s.end()) << endl;
}
标签:输出,int,字母,算法,str,字符串,小子,字典
From: https://www.cnblogs.com/yumingkuan/p/17294646.html