哈希表模板题求助
  • 板块学术版
  • 楼主jingxuan831
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/17 17:34
  • 上次更新2024/4/17 20:27:41
查看原帖
哈希表模板题求助
938495
jingxuan831楼主2024/4/17 17:34

题意: 给定一个字符串 S,只由 k种小写字母组成。现在给定一个长度 l,要求统计一下 有多少种不同的长度为 l 的子串( S中连续的几个字符)。

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int l,k,base[1145141],a[1145141];
string str;
int main() {
	cin>>l>>k>>str;
	base[0]=1;
	for(int i=0;i<str.size();i++) 
		base[i]=base[i-1]*97%mod;
	a[0]=(str[0]-'a'+1)%mod;
	for(int i=1;i<str.size();i++) {
		a[i]=str[i]-'a'+1+a[i-1]*11%mod;
	}
	int last=a[l-1],res,ans=0;
	for(int i=1;i+l<str.size();i++) {
		res=(a[l+i-1]-a[i-1]*base[l+i-1-i+1])%mod;
		if(res!=last) ans++;
	}
	cout<<ans;
	return 0;
}
2024/4/17 17:34
加载中...