Namomo子串

题目链接:Namomo子串


考虑从前往后dp即可。

dp[i]为以i开始的满足第一个是辅音第二个元音,然后重复的子串长度。

然后枚举两个相邻的计算即可。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e5+10;
int dp[N],res,n; char str[N];
inline int check(char c){return c=='a'||c=='e'||c=='i'||c=='o'||c=='u';}
signed main(){
	scanf("%s",str+1); n=strlen(str+1);
	for(int i=n-1;i>=1;i--){
		if(i<=n-5&&!check(str[i])&&check(str[i+1])&&dp[i+2]>=2)	res+=dp[i+2]-1;	
		if(str[i]==str[i+2]&&str[i+1]==str[i+3]) dp[i]+=dp[i+2];
		if(!check(str[i])&&check(str[i+1]))	dp[i]++;
		else	dp[i]=0;
	}
	cout<<res;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章