求助
查看原帖
求助
1120655
1_Niyuqi楼主2024/6/27 19:40
#include<bits/stdc++.h>
using namespace std;
const long long M=2e6+10;
string str;
long long ans=0,f=0;
int a[M];
int head=0,sum;
map<long long,int> book;
int bmax=-1;
long long B[M];
int main(){
	book[0]=1;
	int n;
	cin>>n>>str;
	for(int i=1;i<=n;i++){
		if(str[a[head]]==str[i-1]&&head!=0){
			B[i]=B[a[head]-1];
			head--;
		}else{
			head++;
			a[head]=i;
			B[i]=B[i-1]*27+str[i-1]-'a'+1;
		}
		book[B[i]]+=1;
	}
	for(map<long long,int>::iterator it=book.begin();it!=book.end();it++){
		long long e;
		e=it->second;
		ans+=e*(e-1)/2;
	}
	cout<<ans;
	return 0;
}

2024/6/27 19:40
加载中...