題目鏈接: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;
}