14 | 字符串前后缀相等(字符串哈希巩固练习)
题目描述
给定若干由小写字母组成的字符串(这些字符串总长 ≤4×105),在每个字符串中求出所有既是前缀又是后缀的子串长度。
例如:ababcababababcabab,既是前缀又是后缀的:ab,abab,ababcabab,ababcababababcabab。
输入
输入若干行,每行一个字符串。
输出
对于每个字符串,输出一行,包含若干个递增的整数,表示所有既是前缀又是后缀的子串长度。
样例
输入
ababcababababcabab aaaaa
输出
2 4 9 18 1 2 3 4 5
#include <bits/stdc++.h> using namespace std; typedef unsigned long long ULL; const int N=4e5 + 10,P=131; ULL h[N],p[N]; char s[N]; // 计算哈希 void gethash(){ int len=strlen(s+1); p[0]=1; for(int i=1;i<=len;i++){ p[i]=p[i-1]*P; h[i]=h[i-1]*P+(s[i]-'a'+1); } } //计算区间哈希值 ULL get(int l,int r){ return h[r]-h[l-1]*p[r-l+1]; } int main(){ while(scanf("%s",s+1)!=EOF){ gethash();//对于字符串 S 计算滚动哈希值 // 遍历每种可能的长度 int len=strlen(s+1); for(int i=1;i<=len;i++){ if(get(1,i)==get(len-i+1,len)) printf("%d ",i); } printf("\n"); } return 0; }
分类:
算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)