以顺序存储结构表示串,试设计一个算法求串s和t的一个最长公共子串
时间: 2024-05-20 10:15:45 浏览: 89
求最长的公共子串
好的,理解您的要求,以下是求最长公共子串的算法:
1. 创建一个二维数组dp[m+1][n+1],其中m和n分别为两个串的长度,初始化所有元素为0。
2. 遍历两个串的每个字符,若s[i]和t[j]相同,则令dp[i][j] = dp[i-1][j-1] + 1,表示当前字符匹配成功,且公共子串长度为前一个位置的长度+1。
3. 若s[i]和t[j]不相同,则令dp[i][j] = 0,表示当前字符不匹配,公共子串长度为0。
4. 遍历过程中记录最大值max,以及对应的i和j。
5. 最后根据max和对应的位置i和j输出最长公共子串。
注意:本算法不考虑空间优化,若需要优化可将dp数组压缩为一维数组。另外,该算法适用于顺序存储结构表示串的情况,不适用于其他存储结构。
阅读全文