LeetCode两个字符串的删除操作:memo数组值含义疑问
问题解答
你的代码逻辑正确,返回结果也符合预期,问题出在你对memo[i][j]的定义理解偏差上:
你认为memo[i][j]表示使word1前i个字符与word2前j个字符相同的最少步数,但实际上你的递归函数里,i和j是当前处理到的字符串索引,memo[i][j]的真实含义是:
处理
word1从第i位开始的子串和word2从第j位开始的子串,使其相同所需的最少删除步数
针对输入word1="sea"、word2="eat":
memo[0][0]对应的是处理整个word1和整个word2,也就是原题要求的最少步数,所以值为2,这完全正确。- 对应两个空字符串的场景是
memo[3][3](word1长度为3,word2长度也为3),这个位置的值才是0,符合你对空串的预期。
可以验证几个其他位置的memo值来确认:
memo[3][1]:word1已处理完(空串),word2剩下"at",需要删除2个字符,值为2。memo[1][2]:word1剩下"ea",word2剩下"t",最少需要删除3步,值为3。
你的递归逻辑没问题,只是对memo数组的索引含义理解反了,调整定义认知后就完全通顺了。
内容的提问来源于stack exchange,提问作者Rahul A
相关产品推荐
相关产品推荐

