Leetcode 712 Solution

This article provides solution to leetcode question 712 (minimum-ascii-delete-sum-for-two-strings)

https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings

Solution

class Solution:
    def minimumDeleteSum(self, s1: str, s2: str) -> int:
        m = len(s1)
        n = len(s2)

        dp = [[10000000] * n for _ in range(m)]

        dp[0][0] = 0 if s1[0] == s2[0] else ord(s1[0]) + ord(s2[0])

        s = ord(s1[0])
        for i in range(1, m):
            if s1[i] == s2[0]:
                dp[i][0] = s
            dp[i][0] = min(dp[i][0], ord(s1[i]) + dp[i - 1][0])
            s += ord(s1[i])

        s = ord(s2[0])
        for j in range(1, n):
            if s1[0] == s2[j]:
                dp[0][j] = s
            dp[0][j] = min(dp[0][j], ord(s2[j]) + dp[0][j - 1])
            s += ord(s2[j])

        for i in range(1, m):
            for j in range(1, n):
                if s1[i] == s2[j]:
                    dp[i][j] = dp[i - 1][j - 1]
                dp[i][j] = min(dp[i][j], dp[i - 1][j] + ord(s1[i]), dp[i][j - 1] + ord(s2[j]))

        return dp[-1][-1]