编辑距离及问题延伸
由于最近在leetcode上刷题,这一阵又focus在了dynamic programming上面,动态规划一向就是面试的重点,而且题目难度普遍较大,难点并不在于像字符串数组中索引位置控制那种令人纠结的问题,更多是在思维上的深度,如果能够对问题进行很好的建模,代码通常会很简单,所以个人认为这类题目需要经常动笔写一写,从一些小例子出发寻求规律。
之前在上算法课的时候学习过动态规划的思想,而其中的编辑距离问题又是重中之重。恰好今天刷题的时候遇到了这类问题,所以动动笔,来总结一下。这是我的第一篇博客,希望能够开个好头。
编辑距离
又称Levenshtein距离(莱文斯坦距离也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。这三个操作的代价被认为是相同的,记为1。
这个距离通常被用来度量两个字符序列的相似程度,在长度一定的情况下,修改最小次数越多,两个序列的相似程度越小。举个简单的例子:两个字符串,str1="beast",str2="seat"。如果统计这个修改次数,我们可以删除str1的'b' 和 's',删除str2的's',共三次操作,虽然我们也可以删除"bea"和"ea",保留"st",但是这样的操作就需要5次,并不是最经济的。