算法题-第K个小子串

第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;
}
posted @ 2023-04-06 23:49  博客是个啥?  阅读(153)  评论(0编辑  收藏  举报