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