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