贪心
题目自身限制每个字母最多出现在一个限制词语中,给出k个限制词语,将问题转化为k个子问题,对每个限制词语遍历给出的字符串,如限制词do,若出现连续的oddoood(连续的o和d),统计o和d出现的次数,消去较小的次数。
#include<cstdio> #include<cstring> using namespace std; const int N=100005; char fb[14][2]; char s[N]; int main() { int n; gets(s); scanf("%d ",&n); int len=strlen(s); for(int i=1;i<=n;i++) { scanf("%c%c",&fb[i][0],&fb[i][1]); getchar(); } int cnt=0,cntt=0,res=0; for(int j=1;j<=n;j++) { cnt=0,cntt=0; for(int i=0;i<len;i++) { if(s[i]==fb[j][0] || s[i]==fb[j][1]) { if(s[i]==fb[j][0]) cnt++; else if(s[i]==fb[j][1]) cntt++; } else { res+=min(cnt,cntt); cnt=cntt=0; } } if(s[len-1]==fb[j][0] || s[len-1]==fb[j][1]) res+=min(cnt,cntt); } printf("%d ",res); return 0; }