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; }