15 最少前缀操作问题

84 阅读1分钟

最少前缀操作问题

题目描述

小U和小R有两个字符串,分别是ST,现在小U需要通过对S进行若干次操作,使其变成T的一个前缀。操作可以是修改S的某一个字符,或者删除S末尾的字符。现在你需要帮助小U计算出,最少需要多少次操作才能让S变成T*的前缀。


测试样例

样例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


💡Analysis

  1. 对于字符串S,只能改,或者删除最后一个字符,那么对于s = abcd, T = 'bcd'前三位改,后一位删除,输出则为:4

  2. 分析情况

    • `S == T => 相等0

    • len(S) <= len(T) => 遍历S

    • len(S) > len(T) => 遍历T

代码如下:

def solution(S: str, T: str) -> int:
    if S == T:
        return 0
    else:
        cc = 0
        len_s, len_t = len(S), len(T)
        for i in range(min(len_s, len_t)):
            if S[i] != T[i]:
                cc += 1
        if (len(S) - len(T)) >= 0:
            cc += len(S) - len(T)
    	return cc

💡💡时空复杂度

  • 时间复杂度O(n)O(n)
  • 空间复杂度O(1)O(1) 只算def函数内定义的

Ending ...