博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程珠玑---读书笔记---使用后缀数组查找最长重复子串
阅读量:6153 次
发布时间:2019-06-21

本文共 862 字,大约阅读时间需要 2 分钟。

后缀数组是一个字符指针数组,数组中指针所指的对象包含了字符串的每一个后缀,因此成为后缀数组。

看代码:

 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define MAXN 5000000char c[MAXN],*a[MAXN];bool cmp(char *p,char *q) //对后缀数组进行排序所用的谓词函数 { return strcmp(p,q)<0;}int comlen(char *p,char *q) //计算最长公共子串的长度 { int i=0; while(*p && (*p++==*q++))i++; return i;}int main(){ char ch; int n=0; while((ch=getchar())!=EOF) { c[n]=ch; a[n]=&c[n]; n++; } c[n]='\0'; sort(a,a+n,cmp); //for(int i=0;i
<
<
maxlen){ maxlen=comlen(a[i],a[i+1]); maxi=i; } } printf("%.*s\n",maxlen,a[maxi]); //输出前maxlen个字符 return 0;}

样例输入:ask not what your country can do for you,but what you can do for your country.

 

输出:        “ can do for you”

由于排序的存在,算法需要O(n logn)的时间。

 

转载地址:http://tsffa.baihongyu.com/

你可能感兴趣的文章
移动端响应式
查看>>
js中var、let、const的区别
查看>>
简洁优雅地实现夜间模式
查看>>
react学习总结
查看>>
在soapui上踩过的坑
查看>>
MySQL的字符集和字符编码笔记
查看>>
ntpd同步时间
查看>>
must implement java.io.Serializable hessian
查看>>
Microsoft Licenses Flash Lite for Windows Mobile Users
查看>>
HDOJ 2020 绝对值排序
查看>>
HDOJ/HDU 2560 Buildings(嗯~水题)
查看>>
Maven编译时跳过Test
查看>>
Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
查看>>
[20170628]12C ORA-54032.txt
查看>>
linux运维人员的成功面试总结案例分享
查看>>
Windows DHCP Server基于MAC地址过滤客户端请求实现IP地址的分配
查看>>
命令查询每个文件文件数
查看>>
《跟阿铭学Linux》第8章 文档的压缩与打包:课后习题与答案
查看>>
RAC表决磁盘管理和维护
查看>>
Apache通过mod_php5支持PHP
查看>>