1. 程式人生 > >尋找一個字串中的最長重複子串(字尾陣列)&找出一個字串中最長不重複子串

尋找一個字串中的最長重複子串(字尾陣列)&找出一個字串中最長不重複子串

一、尋找一個字串中的最長重複子串(字尾陣列)

字尾陣列其實可以看尋找一個字串中的最長重複子串(字尾陣列)作一個由字串s倒數i個字元組成的子串的集合,其中0<i<s.length(),例如 字串strstr的字尾陣列為: 
{r,tr,str,rstr,trstr,strstr} 
得到這個集合之後,我們可以發現,最長重複子串其實變成了求該集合中任意兩個元素的最長公共字首的問題。因為在這個集合中,原字串中的每個字元都會出現在集合中元素的首位,而如果有子串重複出現,那麼該子串肯定會出現在某兩個或者多個元素的公共字首上。 
接下來問題就變成了如何去尋找最長公共字首,除了暴力搜素之外,我們可以考慮先對該集合中的元素按照字典序進行排序,然後依次比較相鄰的元素,找出其中的最長公共字首即可。

二、找出一個字串中最長不重複子串(python)