解题思路:动态规划,dp[i][j]表示s1到第i个字符与s2到第j个字符保持相同所需删掉的最少的ascii码的和,若s1[i]==s2[j],则dp[i+1][j+1]与dp[i][j]相同。否则,为删掉s1[i]或删掉s2[j]后,前一个状态加上删去字符的ascii码后的最小值。
class Solution(object):
def minimumDeleteSum(self, s1, s2):
"""
:type s1: str
:type s2: str
:rtype: int
"""
dp = [[0 for i in range(len(s2)+1)] for i in range(len(s1)+1)]
for i in range(1,len(s1)+1):
dp[i][0] = dp[i-1][0]+ord(s1[i-1])
for i in range(1,len(s2)+1):
dp[0][i] = dp[0][i-1]+ord(s2[i-1])
for i in range(1,len(s1)+1):
for j in range(1,len(s2)+1):
if s1[i-1] == s2[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = min(dp[i-1][j]+ord(s1[i-1]),dp[i][j-1]+ord(s2[j-1]))
return dp[-1][-1]