题目链接: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;
}