51Nod1469 淋漓尽致子串
#pragma GCC opitmize("O3") #pragma G++ opitmize("O3") #include<stdio.h> #include<string.h> #include<algorithm> #define N 200010 using namespace std; char str[N]; int ans=0; int s[N][26],mx[N],sz[N],f[N]; int n,m,cnt=1,lst=1,v[N],r[N]; inline int extend(int c){int p=lst,np=lst=++cnt,q,nq;mx[np]=mx[p]+1; sz[np]=1;for(;!s[p][c];p=f[p]) s[p][c]=np;if(!p) return f[np]=1;q=s[p][c];if(mx[q]==mx[p]+1) f[np]=q;else{nq=++cnt;mx[nq]=mx[p]+1;f[nq]=f[q]; f[q]=f[np]=nq;memcpy(s[nq],s[q],26<<2);for(;p&&s[p][c]==q;p=f[p]) s[p][c]=nq;} } int main(){scanf("%s",str+1); n=strlen(str+1);for(int i=1;i<=n;++i) extend(str[i]-'a');for(int i=1;i<=cnt;++i) ++v[mx[i]];for(int i=1;i<=n;++i) v[i]+=v[i-1];for(int i=cnt;i;--i) r[v[mx[i]]--]=i;for(int i=cnt;i;--i) sz[f[r[i]]]+=sz[r[i]];memset(v,*sz=0,sizeof v);for(int p,i=cnt;i;--i){p=r[i];if(sz[p]>1) v[f[p]]=1;if(sz[p]==1) v[p]=1; else for(int c=0;c<26;++c)if(sz[s[p][c]]>1){ v[p]=1; break; }}for(int i=cnt;i;--i) ans+=!v[i];printf("%d\n",ans); }
转载于:https://www.cnblogs.com/Extended-Ash/p/9477134.html
51Nod1469 淋漓尽致子串相关推荐
- Redis 笔记(03)— string类型(设置key、获取key、设置过期时间、批量设置获取key、对key进行加减、对key值进行追加、获取value子串)
字符串 string 是 Redis 最简单的数据结构.Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据.不同类型的数据结构的 ...
- 寻找一个字符串的重复子串 后缀数组
什么是后缀数组 令字符串 S=S[1]S[2]...S[n]S=S[1]S[2]...S[n]{\displaystyle S=S[1]S[2]...S[n]} , S[i,j]S[i,j]{\dis ...
- leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法
题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...
- 求一个字符串中连续出现的次数最多的子串
求一个字符串中连续出现的次数最多的子串.例如字符串"abababc",最多连续出现的为ab,连续出现三次.要和求一个字符串中的最长重复子串区分开来,还是上面的字符串,那么最长的重复 ...
- 【牛客网】最长对称子串
给定一个字符串(数字或大小写字母), 找出最长的对称的子串(如有多个,输出任意一个). 例如: 输入:"abbaad" 输出:"abba" #include & ...
- 【leetcode】力扣刷题(3):无重复字符的最长子串(go语言)
一.问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- 【动态规划】最长公共子序列与最长公共子串
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- BZOJ1396:识别子串(SAM)
Description Input 一行,一个由小写字母组成的字符串S,长度不超过10^5 Output L行,每行一个整数,第i行的数据表示关于S的第i个元素的最短识别子串有多长. Sample I ...
- SPOJ 694 不同子串个数
一个论文题,求一个字符串有多少个不同的子串. 每个字符串可以看做一个后缀的前缀,然后,就转换为求每一个后缀中,不同的子串有多少. 每一个后缀,根据长度,可以提供len - sa[i] 个子串,但是,画 ...
最新文章
- linux 文件查找与文件中注释去除
- Android文件的下载
- js超出文字个数展示省略号
- 使用 vue-cli 开发多页应用
- 读完《云原生架构白皮书》,我们来谈谈开放应用模型(OAM)
- [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)...
- HTTP之Range
- map、mapPartitions、mapValues、mapWith、flatMap、flatMapWith、flatMapValues
- Mybatis教程(实战看这一篇就够了)
- 西南科技大学OJ题 Delete Numbers 0700
- ROS下使用摄像头进行机器人巡线功能(附带功能包链接)
- mysql闪退的解决方案
- Netbean8.2初次运行Mavn的初始配置
- PeopleSoft基础知识整理
- 【SPEA】T100BT 全能型电池测试仪——精度高、智能化
- 老师计算机组合照说说,关于老师的空间说说23句
- 跨链技术如何破解区块链的可扩展性难题?
- 快速排序的三种方式以及快排的优化
- oracle ora-03114
- C++ 策略模式的具体案例与优缺点