题目链接:154A
题意:给你一个字符串,接下来给你n对字符,每对代表这两个字母有冲突不能相邻(一个字母只与不超过一个字母产生冲突),你可以删除某个字符来达到这个要求,现在问你最少需要删除多少个字符。
思路:题目说了每个字母只与不超过一个字母产生冲突,所以可以知道n对字符串它们之间的解是独立的,接下来思考单独的一组,如果有连续的子字符串,全部由冲突字母构成,例如pg冲突,子字符串为pgppggg,不难得出,只需将数量少的字母删去就可以解决冲突,这里删去3个p就能解决冲突。
代码:
#include<bits/stdc++.h>
#define LL long long
#define Max 100005
const LL mod=1e9+7;
const LL LL_MAX=9223372036854775807;
using namespace std;
map<string,int>m;
int main()
{
string s,t;
cin>>s;
int n;
scanf("%d",&n);
int ans=0;
for(int i=0;i<n;i++){
cin>>t;
int a=0,b=0;
for(int i=0;i<s.size();i++){
if(s[i]==t[0])
a++;
else if(s[i]==t[1])
b++;
else
ans+=min(a,b),a=0,b=0;
}
ans+=min(a,b);
}
printf("%d\n",ans);
return 0;
}