📅  最后修改于: 2023-12-03 14:48:45.420000             🧑  作者: Mango
这道题可以用动态规划的思想来解决,具体来说,我们可以用两个指针 i 和 j 分别指向两个字符串的开头,然后向后遍历,如果 s1[i] 和 s2[j] 相等,我们就令 i 和 j 都加 1,否则只将 j 加 1。当 i 遍历到 s1 的结尾或者 j 遍历到 s2 的结尾时,我们就找到了一个 s2 中的子序列,它是 s1 的一个前缀。
由于我们要求最大长度前缀,因此需要记录下已经匹配上的前缀长度,用变量 ans 记录即可。
以下为 Python 代码实现:
def findMaxCommonPrefix(s1: str, s2: str) -> int:
m, n = len(s1), len(s2)
i, j, ans = 0, 0, 0
while i < m and j < n:
if s1[i] == s2[j]:
ans += 1
i += 1
j += 1
else:
j += 1
return ans
时间复杂度为 $O(m+n)$,其中 $m$ 和 $n$ 分别是两个字符串的长度。
如果需要在多个字符串中寻找公共前缀,可以将第一个字符串和第二个字符串的最长公共前缀作为新的字符串,再和第三个字符串求公共前缀,以此类推,直到所有字符串的公共前缀求出为止。