uva11017

来源:互联网 发布:全文期刊数据库 编辑:程序博客网 时间:2024/06/07 11:42

此题是书上的例题,我之所以写这个是因为此题是看的后缀数组的第一题

献上两篇论文:我是看这两篇了解的书上的讲解其实也是由这个来的

 后缀数组处理字符串有利工具---罗穗骞:http://download.csdn.net/detail/luyuncheng/5134904

后缀数组--许智磊 http://download.csdn.net/detail/luyuncheng/5134908 


此题说下我的理解:后缀数组height的RMQ的性质要掌握:就是LCP(i,j)=min(height[k],k+1<=i <=j)     那么任意一个子串,必定是某个后缀的前缀。

然后我要求最长的L那么我就二分答案就最长的L。对于每个搜索的L 我判断是否在串中出现一半以上就可以了。

为什么要将小于P的分段是因为对于大于P的那么表示前P个字符一定匹配。那么这个长度肯定是满足的子串,如果不满足的就直接分段,那么就保证这一段不会有不匹配的,多出来长度就是0啊。

然后判断是否可行。由于第i个排序针对原串的位置是sa【i】,那么在输入的时候对于原串的每个字符建立hash,那么hash【sa【i】】即表示输入的那个原串的id号,然后flag标记这个原串,然后暴力搜就好了。

这几句话理解居然花了我一晚上,要不是大神指点,估计我好久都想不通呢。。下午想那个rmq性质就想了好久啊啊啊啊。。。

在此感谢jesful大神的指点才能稍微理解一点点后缀数组啊啊啊啊!!!!。。。。。感谢两篇论文啊!!!ORZ