摘要:
【题意】 两个串的最长公共连续子串 【分析】 直接连到一起,中间加上间隔符,求height之后,二分答案判断在是否属于两个串 【代码】 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<a 阅读全文
摘要:
【题意】 求最长回文子串 【分析】 把原字符串翻过来接到后面,中间放一个特殊字符 然后枚举每一个点作为回文串的中心,计算当前位置的后缀和对应的延长位置上的后缀的最长公共前缀 具体的:分类讨论如果i为奇数长度的中心lcp(i,n-i-1),i为偶数长度回文串的中心的一个lcp(i,n-i) 【代码】 阅读全文
摘要:
【题意】 字符串从头开始最多有多少个重复片段 【分析】 求出nxt数组,看总长度是不是最长能重复多少的倍数,如果是则说明有循环节,总长度处于循环节长度即可 如果不能整除说明循环节只有几个 【代码】 #include<iostream> #include<cstdio> #include<cstdli 阅读全文
摘要:
【题意】 求不相同的子串的个数 【分析】 考虑每一个后缀的前缀表示了所有的子串,有n*(n+1)/2个 减去重复的即可,也就是所有的height之和 【代码】 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring 阅读全文
摘要:
【题意】 求重复k次可重叠子串长度 【分析】 height分组,一组内有k个后缀即可 【代码】 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using name 阅读全文
摘要:
【题意】 求出现次数超过一半的最长子串 【分析】 把所有的串连在一起,中间放上间隔符,然后求height之后 二分答案转换为判定问题,每次按height分组,看一组中是否出现了超过一半次数即可 【代码】 #include<iostream> #include<cstdio> #include<cst 阅读全文
摘要:
【题意】 找出最长的相似不重叠子串,这里相似定义为两个串每次字符对应的差值相同 【分析】 显然,我们可以首先讲相邻两个的差值作为新的字符串来比较,这样原问题就转换为了求最长的不重叠重复子串 先利用二分,转换为判定性问题,然后对height进行分组,大于等于mid的可以分在一组,如果这一组内的最大和最 阅读全文