📅  最后修改于: 2023-12-03 15:42:22.039000             🧑  作者: Mango
本篇题解将介绍门|门 IT 2007年第26道题目,该题目主要考察程序员的字符串操作和逻辑思维能力。
给定两个长度分别为N和M的字符串A和B,字符串中只包含小写字母,现在你需要实现一个算法,返回两个字符串的最长公共后缀。
输入文件包含两行,第一行为一个长度为N的字符串A,第二行为一个长度为M的字符串B。
输出文件只包含一行,即两个字符串的最长公共后缀。
abcdefg
hijklmng
ng
本题可以使用双指针的方法,从字符串的末尾开始逐位比较,直到第一个不同的字符出现,即为最长公共后缀。
具体实现可以参考以下代码段:
def get_lcp(a, b):
n, m = len(a), len(b)
i, j = n - 1, m - 1
while i >= 0 and j >= 0:
if a[i] != b[j]:
break
i -= 1
j -= 1
return a[i+1:n]
由于仅仅是从字符串末尾开始逐位比较,所以时间复杂度为O(N+M),其中N和M分别为两个字符串的长度。
由于本题中字符串仅包含小写字母,可以使用ord()将字符转为整数,从而优化比较操作。
具体实现可以参考以下代码段:
def get_lcp(a, b):
n, m = len(a), len(b)
i, j = n - 1, m - 1
while i >= 0 and j >= 0:
if ord(a[i]) != ord(b[j]):
break
i -= 1
j -= 1
return a[i+1:n]
通过本题可以锻炼程序员的字符串操作和逻辑思维能力,同时可以加深对双指针算法的理解,是一道非常优秀的练习题目。