题目描述
给定一个单词,请问在单词中删除 tt 个字母后,能得到的字典序最小的单词是什么?
输入描述
输入的第一行包含一个单词,由大写英文字母组成。
第二行包含一个正整数 tt。
其中,单词长度不超过 100100,tt 小于单词长度。
输出描述
输出一个单词,表示答案。
简单的一道字符模拟,一直没看懂样例,看懂之后大意就是删除n个数之后的最小的字典序单词,我们可以把它理解成他所有前面的数字都是在删除了N个数字之后最小的,只要还能删除数字并且当前字母的后面还有比他小的,那么我们就可以将他删除,因为有比他还小的我们完全可以把它删除了让比他更小的字母留着,这样整个单词都会比较小。
#include<bits/stdc++.h>
using namespace std;
char a[105];
bool b[105];
int n;
int main(){
cin>>a;
cin>>n;
int len=strlen(a); //总长度
int rm=0; //移除的数字
for(int i=0;i<len;i++){
for(int j=i;j<len;j++){
if(a[i]>a[j]){ //如果当前字母之后还有比他更小的我们就将他删除
b[i]=true;rm++;break; //将当前字符标记为删除,并且rm加1,然后跳出循环别继续搜下去了
}
}
if(rm==n)break; //如果删够了那么我们就不删了
}
for(int i=0;i<len;i++){
if(!b[i])cout<<a[i]; //如果当前单词没被标记我们就输出它
}
return 0;
}