1. 使用set迭代是一种不错的方式。最优效率的方式,其他看注释。
#include<bits/stdc++.h>
using namespace std;

int main(){

    string s;
    int k;

    cin>>s>>k;

    set<string> result;//在该容器中本身就是有序的,就是字典序
    int n = s.size();
    string temp;
    for(int i = 0; i< n;i++){
        temp.clear();
        for(int j = i; j< n;j++){
            temp.push_back(s[j]);//字符串也可以压栈构建

            if(result.size()==k){//该轮在往后走已经超出最小字符串了,因为后面字符串肯定还会更长
                if (temp>=*(--result.end())){
                    break;
                }
                //如果不进入,就证明还在前面。
            }

            result.insert(temp);//插入结果。
            //最多存k个
            if(result.size()>k) result.erase(--result.end());
        }
    }


    cout<<*(--result.end())<<endl;

    return 0;
}