子串問題2

題目鏈接:子串問題2


考慮以每個點作爲右端點的最長子串長度。

即不包括最近的一個連續3個相同的字符串。


AC代碼:

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