1.题目
问题描述
小U和小R有两个字符串,分别是SS和TT,现在小U需要通过对SS进行若干次操作,使其变成TT的一个前缀。操作可以是修改SS的某一个字符,或者删除SS末尾的字符。现在你需要帮助小U计算出,最少需要多少次操作才能让SS变成TT的前缀。
测试样例
样例1:
输入:
S = "aba", T = "abb"输出:1
样例2:
输入:
S = "abcd", T = "efg"输出:4
样例3:
输入:
S = "xyz", T = "xy"输出:1
样例4:
输入:
S = "hello", T = "helloworld"输出:0
样例5:
输入:
S = "same", T = "same"输出:0
2.思路
拿到这道题,发现和之前做过的DNA序列编辑距离问题很像
小R正在研究DNA序列,他需要一个函数来计算将一个受损DNA序列(dna1)转换成一个未受损序列(dna2)所需的最少编辑步骤。编辑步骤包括:增加一个碱基、删除一个碱基或替换一个碱基。
所以先入为主地认为需要用动态规划,但是仔细看过之后发现还是有很大的差别,这道题只能修改S的某一个字符,或者删除S末尾的字符,不能在中间插入或删除,并且需要S等于T的前缀,所以只要从前往后比较,不同则换,比完后S还剩的就要删除
3.代码
def solution(S: str, T: str) -> int:
# write code here
cnt = 0
i = 0
while i < (len(S)) and i < len(T):
if S[i] != T[i]:
# 不一样则替换
cnt += 1
i += 1
# 如果S有剩余,需要删除
if len(S) > len(T):
cnt += len(S) - len(T)
return cnt
if __name__ == '__main__':
print(solution("aba", "abb"))
print(solution("aba", "abb") == 1)
print(solution("abcd", "efg") == 4)
print(solution("xyz", "xy") == 1)
print(solution("hello", "helloworld") == 0)
print(solution("same", "same") == 0)