解题思路:
动态规划。
①创建一个大小为(n+1)*(m+1)的二维数组,命名为dp,n和m分别为字符串s、t的长度。
其中dp[i][j]表示s中的前i个字符要想包含t的前j个字符最少需要修改几次。
②dp[i][0] = 0(i = 0 to n)
③状态转移方程
当s[i] = t[j]时,这时我们不用进行变换则,dp[i][j] = dp[i-1][j-1]
当s[i] != t[j]时,这时有两种情况,一种情况是,在s中没取到第i个字符时,已经可以包含t取到字符j了。
另一种情况是,此时t取到第j个字符时还未被包含,那么在此时,就要进行一次变换
所以dp[i][j] = min(dp[i-1][j],dp[i-1][j-1]+1)
注意事项:
参考代码:
from cmath import inf s = input().strip() t = input().strip() n = len(s) m = len(t) dp = [[inf for j in range(m+1)] for i in range(n+1)] for i in range(n+1): dp[i][0] = 0 for i in range(1,n+1): for j in range(1,m+1): if s[i-1] == t[j-1]: dp[i][j] = dp[i-1][j-1] else: dp[i][j] = min(dp[i-1][j],dp[i-1][j-1]+1) print(dp[n][m])
0.0分
6 人评分
【出圈】 (C语言代码)浏览:553 |
A+B for Input-Output Practice (C++代码)浏览:605 |
C语言考试练习题_排列 (C语言代码)浏览:719 |
2004年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:1327 |
三角形 (C语言代码)浏览:904 |
用筛法求之N内的素数。 (C语言代码)浏览:664 |
Hello, world! (C语言代码)浏览:714 |
出圈】指针malloc版浏览:355 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:593 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:679 |