LeetCode dp专题

longest valid parentheses:

dp[i]表示到i为止合法的()长度

s[i] == ')' :

dp[i] = dp[i-2] + 2                          ( s[i]=='(' )

dp[i] = dp[i-1] + 2 + dp[i-dp[i-1]-2]  ( s[i-1] == ')' && s[i-1-dp[i-1]] == '(' )

注意判断数组下标值是否存在

72. Edit Distance

将word1转换成word2:

三种操作:插入/删除/替换 一个字符

dp[i][j]表示word1 [0, i),word2 [0, j) 子串转换成功时的最少转换次数

初始化: dp[0][j]=j 插入操作,dp[i][0]=i 删除操作

word1[i-1]==word2[j-1]: dp[i][j] = dp[i-1][j-1]

word1[i-1]!=word2[j-1]:  dp[i][j] = min(dp[i-1][j-1], min(dp[i][j-1], dp[i-1][j])) + 1;

对应三种操作:替换 dp[i-1][j-1] + 1, 删除(word1[i-1])  dp[i-1][j] + 1,

       插入(word1[i-1]后插入word2[j-1]才两个子串相同 <=> 删除word2[j-1]使得两个子串相同) dp[i][j-1] + 1 

猜你喜欢

转载自www.cnblogs.com/demian/p/11261378.html