最长公共子串
最长公共子串问题是寻找两个或多个已知字符串最长的子串。此问题与最长公共子序列问题的区别在于子序列不必是连续的,而子串却必须是。
求解最长公共子串可以借助动态规划法,思路如下:
求 'ABCDEF' 和 'BCDF' 的最长公共子串,首先可以建立两组字符串,分别是
'A'
'AB'
'ABC'
'ABCD'
'ABCDE'
'ABCDEF'
以及
'B'
'BC'
'BCD'
'BCDF'
从这两组当中各选一个字符串,对选中的两个字符串求一个“最长公共尾串”,所谓“最长公共尾串”,就是说它必须是这两个字符串的尾巴,且越长越好。
当选择到的两个字符串正好都是以“最长公共子串”为尾巴时,这两个字符串的“最长公共尾串”就是“最长公共子串”。在这个例子中,当选中字符串'ABCD'和'BCD'时,其“最长公共尾串”是'BCD',正是问题的解。
当我们求两个长度分别为 N 和 M 的字符串的“最长公共尾串”时,可以根据其前 N-1 和 M-1 个字符组成的字符串的“最长公共尾串”求得。