思路:其实很简单,就是两个字符串连接起来,中间用个特殊字符隔开,然后用后缀数组求最长公共前缀,然后不同在两个串中,并且最长的就是最长公共子串了。
注意的是:用第一个字符串来判断是不是在同一个字符中,刚开始用了第二个字符的长度来判断WA了2发才发现。
#include
#include
#include
#include
#include
#include
#include
#include
#...
                            
                            
                                分类:
其他好文   时间:
2014-08-15 00:02:56   
                                阅读次数:
248
                             
                         
                    
                        
                            
                            
                                思路:这题下午搞了然后一直WA,后面就看了Discuss,里面有个数组:ABCDEFDCBA,这个我输出ABCD,所以错了。
然后才知道自己写的后缀数组对这个回文子串有bug,然后就不知道怎么改了。
然后看题解,里面都是用RMQ先预处理任意两个后缀的最长公共前缀,因为不太知道这个,所以又看了一下午,嘛嘛……
然后理解RMQ和后缀一起用的时候才发现其实这里不用RMQ也可以,只要特殊处理一下上面...
                            
                            
                                分类:
其他好文   时间:
2014-08-13 22:23:47   
                                阅读次数:
261
                             
                         
                    
                        
                            
                            
                                这题弄了好久,WA了数十发,现在还有个例子没过,可却A了,POJ 的数组也太弱了。
10
1 1 1 1 1 1 1 1 1 1
这组数据如果没有那个n-1
刚开始没明白为什么要判断当前的sa[i]-之前的sa[j]的绝对值>=mid就行,height[i]是rank[sa[i-1])和rank[sa[i])的最长公共前缀呀,为什么和之前的比较呢?
先做后缀数组的其他题,等熟练运用后...
                            
                            
                                分类:
其他好文   时间:
2014-08-13 13:12:46   
                                阅读次数:
228
                             
                         
                    
                        
                            
                            
                                找出单词的最长公共前缀class Solution {public: string longestCommonPrefix(vector &strs) { int len=strs.size(); if(len==0) return ""; ...
                            
                            
                                分类:
其他好文   时间:
2014-08-05 00:09:58   
                                阅读次数:
192
                             
                         
                    
                        
                            
                            
                                题意:将一个字符串切成k块,使得字典序最大的那块最小。
ORZ  WJMZBMR,几行题解读了一天才懂。
快速比较两个子串的大小可以利用LCP(最长公共前缀),比较公共前缀的下一个字符的大小就够了。
利用这种思想,首先我们可以预处理所有子串的LCP(后缀数组+记录 O(2nlog(2n))+O(n*n),dp(O(4*n*n)))
然后将这些子串利用LCP按照字典序排序,开始二分答案。...
                            
                            
                                分类:
其他好文   时间:
2014-08-02 15:38:33   
                                阅读次数:
276
                             
                         
                    
                        
                            
                            
                                题目链接 Write a function to find the longest common prefix string amongst an array of strings. 题目的意思说的不是很清楚,开始理解成了求任意两个字符串的前缀中的最长者。但是本题的意思是求所有字符串的最长公共前缀,...
                            
                            
                                分类:
其他好文   时间:
2014-07-21 09:14:25   
                                阅读次数:
225
                             
                         
                    
                        
                            
                            
                                http://acm.hdu.edu.cn/showproblem.php?pid=4691
去年暑假多校赛的题,当时还不会后缀数组
现在会了,其实自己组合后缀数组跟rmq还是对的,但是题意理解有问题,于是折腾了很久,,,,
此处简单解释下题目样例吧,希望对读者有帮助  以最后一组数据为例
myxophytamyxopodnabnabbednabbingnabit
6
0 9
9 1...
                            
                            
                                分类:
其他好文   时间:
2014-06-18 06:09:03   
                                阅读次数:
407
                             
                         
                    
                        
                            
                            
                                Write a function to find the longest common prefix string amongst an array of strings.题解: 寻找一组字符串的最长公共前缀。最简单的方法,用一个字符串记录当前最长的公共前缀,然后依次比较。时间复杂度: O(N). ...
                            
                            
                                分类:
其他好文   时间:
2014-06-18 00:03:08   
                                阅读次数:
274
                             
                         
                    
                        
                            
                            
                                其实做起来会感觉很简单,需要注意的是要考虑效率的问题,毕竟可能是很长的字符串数组,所以可以考虑选取所有字符串中最短的那个来首先进行比较,因为最长公共子串肯定不会大于其长度,这样避免了字符串之间长度差异很大造成的效率损失,然后每次比较之后最长公共子串的长度也永远不会大于最短的那个字符串,只会不变或相等,只要遍历字符串数组,挨个对比、更改最短公共字符串记录即可,code如下:...
                            
                            
                                分类:
其他好文   时间:
2014-06-11 06:58:55   
                                阅读次数:
226
                             
                         
                    
                        
                            
                            
                                戳我去解题Write a function to find the longest 
common prefix string amongst an array of strings.class Solution {public: string 
longestCommonPrefix(vecto...
                            
                            
                                分类:
其他好文   时间:
2014-06-10 08:29:55   
                                阅读次数:
189