【題目描述】
Given two wordsword1andword2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
·Insert a character
·Delete a character
·Replace a character
給出兩個單詞word1和word2,計算出將word1 轉換爲word2的最少操作次數。
你總共三種操作方法:
·插入一個字符
·刪除一個字符
·替換一個字符
【題目鏈接】
http://www.lintcode.com/en/problem/edit-distance/
【題目解析】
ed[i][j]表示將word1的前i個字符變成word2的前j個字符所需要的最少操作。
初始化:
ed[i][0]=i 刪除i次
ed[0][j]=j 添加j次
狀態函數:
如果word1.charAt(i-1)==word2.charAt(j-1)
ed[i][j]=min(min(ed[i-1][j], ed[i][j-1])+1, ed[i-1][j-1])
否則
ed[i][j]=min(min(ed[i-1][j], ed[i][j-1])+1, ed[i-1][j-1]+1)
即word1的前i爲字符轉換爲word2的前j位字符所需的最小操作有三種情況要討論:
1)將word1的第i位字符刪去。此時只要看word1的前i-1位字符轉換爲word2的前j位字符所需操作再加上剛纔的刪除操作。
2)將word2的第j位字符刪去。此時只要看word1的前i位字符轉換爲word2的前j-1位字符所需操作再加上剛纔的刪除操作。
3)將word1的第i位字符轉換爲word2的第j位字符。此時又分兩種情況:1)word1的第i位字符和word2的第j位字符相等,則對於word1的第i位字符和word2的第j位字符無序任何操作,直接看word1的前i-1位字符轉換爲word2的前j-1位字符所需操作2)word1的第i位字符和word2的第j位字符不相等,則要將word1的第i位字符轉換爲word2的第j位字符,然後就是1)的情況。
這三種情況裏面的最小值就是ed[i][j]的值。
【參考答案】