题意:
删除一个字符或不删除,使得字符串的字典序最小
优先级为:
- 从左往右第一个不同字符的 ASCII 值的大小关系
- 字符串长度
思路:
一道非常明显的贪心题
当找到字符串里某一位使它后面的一位大时,就可以删除这一位(字典序就变小了)
如果没找到,则删除末位(因为不删除比删除末位的字典序大,从优先级的第二点可以看出)
那这样就很容易得到代码了 [doge]
AC Code:
#include<bits/stdc++.h>//万能头文件
using namespace std;//命名空间
string s;//定义子字符串
int res=-1,n;//res 为删除字符的地址,n 为字符串长度
int main(){
cin>>n>>s;//输入
for(int i=0;i<n-1;i++){//从第一位到倒数第二位枚举是否有最优解
if(s[i]>s[i+1]){//找到最优解
res=i;//记录地址
break;//跳出循环
}
}
if(res==-1)res=n-1;//没有最优解,则删除末位(思路已经解释过了)
for(int i=0;i<n;i++){//输出字符
if(res!=i)cout<<s[i];//不是要删除的字符,则输出
}
return 0;//完美结束
}