Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) C. Remove Adjacent(字符串,贪心,枚举)

题意:

给你一个由小写字母组成的字符串,若串中两个相邻元素字典序中也相邻,移除较大字母,问最多能移除多少个字母。

思路:

从大到小依次枚举。

Tips:

注意下标的处理。

以小消大:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;cin>>n;
    string s;cin>>s;
    int ans=0;
    for(char c='y';c>='a';c--){
        for(int i=0;i<s.size();i++){
            if(s[i]==c){
                while(i-1>=0&&s[i-1]==s[i]+1)
                    s.erase(i-1,1),--i,++ans;
                while(i+1<s.size()&&s[i+1]==s[i]+1)
                    s.erase(i+1,1),++ans;
            }
        }
    }
    cout<<ans;
    return 0;
}

以大寻小:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;cin>>n;
    string s;cin>>s;
    int ans=0;
    for(char c='z';c>='b';c--){
        for(int i=0;i<s.size();i++){
            while(i-1>=0&&s[i-1]==s[i]-1&&s[i]==c)
                s.erase(i,1),++ans;
            while(i+1<s.size()&&s[i+1]==s[i]-1&&s[i]==c)
                s.erase(i,1),--i,++ans;
        }
    }
    cout<<ans;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Kanoon/p/12519905.html