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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章