CF1506G Maximize the Remaining String 题解
思路
题目中要求答案字符串的字典序最大,也就是说要让大的字符尽量靠前。
考虑维护一个类似于单调栈的东西,开一个数组记录每个字符在字符串中最后出现的位置。遍历字符串时,记当前字符为
冷知识:字符串支持 pop_back
,所以直接用字符串来模拟栈即可,最后答案就是这个字符串。
代码
#include<bits/stdc++.h>
using namespace std;
int n,a[1005],b[1005];
int lst[1005];
bool is[1005];
string s,ans;
int main(){
cin>>n;
while(n--){
memset(is,0,sizeof(is));
ans="";
cin>>s;
for(int i=0;i<s.size();i++)lst[s[i]]=i;
for(int i=0;i<s.size();i++){
if(is[s[i]]) continue;
while(ans.size()>0&&ans[ans.size()-1]<s[i]&&lst[ans[ans.size()-1]]>i) {
is[ans[ans.size()-1]]=0;
ans.erase(ans.size()-1,1);
}
ans+=s[i];
is[s[i]]=1;
}
cout<<ans<<endl;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器