CF1076A Minimizing the String


题目传送门

题意:

删除一个字符或不删除,使得字符串的字典序最小

优先级为:

  1. 从左往右第一个不同字符的 ASCII 值的大小关系
  2. 字符串长度

思路:

一道非常明显的贪心题

当找到字符串里某一位使它后面的一位大时,就可以删除这一位(字典序就变小了)

如果没找到,则删除末位(因为不删除比删除末位的字典序大,从优先级的第二点可以看出)

那这样就很容易得到代码了 [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;//完美结束 
}

文章作者: alex_liu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 alex_liu !
  目录