递推题:
dp[i]表示字符串第i个字母前有多少种不同的方法
1、出现一个hehe:dp[i]=dp[i-4]+dp[i-2]
意思是dp[i]=当前的hehe换成wqnmlgb+当前的hehe不换成wqnmlgb
2、没有出现hehe:dp[i]=dp[i-1]
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; char ac[12000]; int dp[12000]; int main() { int t,tt=1; cin>>t; while(t--) { scanf("%s",ac+1);//字符串+1有利于计算 int len=strlen(ac+1); dp[0]=dp[1]=dp[2]=dp[3]=1; //初始化,前3个字符组成的串的方法数只可能是1 for(int i=4;i<=len;++i) { if(ac[i-3]=='h'&&ac[i-2]=='e'&&ac[i-1]=='h'&&ac[i]=='e') { dp[i]=dp[i-2]+dp[i-4]; dp[i]%=10007; } else dp[i]=dp[i-1]; } printf("Case %d: %d ",tt++,dp[len]); } }