题目:
输入两个字符串,请求出它们的最长公共子序列长度。如果从字符串s1中删除若干字符之后能得到s2,那么字符串s2就是字符串s1的一个子序列。例如,从字符串’abcde‘中删除两个字符之后得到字符串’ace‘,因此‘ace’是字符串’abcde’的一个字符列。但字符串‘aec’不是字符串’abcde’的一个子序列。如果输入字符串’abcde’和’badfe’,那么它们的最长公共子序列是’bde’,因此输出3.
分析:
作者是用动态规划的思路写的,但是我觉得没必要用动态规划。以求字符串’abcde’和’badfe’的最长公共子序列为例,设s1=‘abcde’,s2=‘badfe’,从s1的第一个字母开始,看是否在s2中,如果在,就记录下来,然后看s2的第二个字母,如果也在s2中,且位置处于第一个字母位置之后,那也记下来,直到遍历完s1.最后就看记录了几个位置,那就是公共子序列的长度。
str1 = 'abcde'
str2 = 'badfe'
str2 = list(str2)
locations = []
for i in str1:
if i in str2:
location = str2.index(i)
locations.append(location)
# 这里直接把str2分割,可以减少判断后面发现的字母是否在前面发现的字母的位置之后
str2 = str2[location+1:]
print(len(locations))