标签:color return str 最大 题目 mat names ++ for
\(\colorbox{Orange}{贪心策略:每次挑选字典序最大的删除.}\)
\(那为什么呢?\)
\(回顾一下题目,当且仅当有比自己小1的字母在附近才能把自己删去\)
\(\color{Red}{字典序最大的字母永远不会作为其他字母的辅助字母删去其他字母}\)
\(比如当前最大字典序字母是d,因为d只能协助e,没有e,d就是废物\)
\(d在中间,只会阻挡两边的字母相互消去,所以删去d\)
#include <bits/stdc++.h>
using namespace std;
int n;
string s;
bool sovle()
{
for(int i=25;i>=0;i--)
{
char w=char(i+‘a‘);
for(int j=0;j<s.length();j++)
{
if(s[j]!=w) continue;
if(j!=0&&s[j-1]==w-1)
{
s.erase(j,1);
return true;
}
if(j!=s.length()-1&&s[j+1]==w-1)
{
s.erase(j,1);
return true;
}
}
}
return false;
}
int main()
{
int ans=0;
cin>>n>>s;
//先从最大的开始消灭起
while(sovle()) ans++;
cout<<ans;
}
1321C - Remove Adjacent(贪心简略证明)
标签:color return str 最大 题目 mat names ++ for
原文地址:https://www.cnblogs.com/iss-ue/p/12862327.html