將乙個字串變為另乙個字串最小操作次數,您對單詞允許以下3種操作:
a)插入字元
b)刪除字元
c)替換字元
例如 a = 『horse』 變成 b = 『ros』
想法:
# -*- coding:utf-8 -*-
def char_array_replace(array1, array2):
row = len(array1)
col = len(array2)
if row*col == 0:
return row+col
d = [[0]*(col+1) for _ in range(row+1)]
print d
#首先考慮極端情況
# array2是空字串,要對array1進行全部刪除操作
for i in range(row+1):
d[i][0] = i
# array1是空字串,要根據array2進行全部插入操作
for j in range(col+1):
d[0][j] = j
# 如果是從前一步變過來的的,說明前一步之前的序列已經一致
# 注意,不是從0 開始
for i in range(1,row+1):
for j in range(1,col+1):
if array1[i-1] == array2[j-1]:
d[i][j] = d[i-1][j-1]
else:
delete = d[i-1][j] + 1
replace = d[i-1][j-1] + 1
insert = d[i][j-1]+1
d[i][j] = min(delete, replace, insert)
print d[i-1][j-1]
def main():
char_array_replace('horse','ros')
if __name__ == "__main__":
main()
動態規劃 編輯距離
1.實踐題目 編輯距離 2.問題描述 設a和b是2個字串。要用最少的字元操作將字串a轉換為字串b。這裡所說的字元操作包括 1 刪除乙個字元 2 插入乙個字元 3 將乙個字元改為另乙個字元。將字串a變換為字串b所用的最少字元運算元稱為字串a到 b的編輯距離,記為d a,b 對於給定的字串a和字串b,計...
動態規劃 編輯距離
給定兩個序列x和y,求從乙個序列到另乙個序列所需變換的最小次數,這裡的變換包括刪除,新增和替換,每次只對乙個元素進行操作。演算法序言 這個題目有點像之前寫的最長公共子串行問題,也是用動態規劃的演算法。能夠應用動態規劃的題目有乙個特點就是具有最優子結構,就是整個問題的最優解會包含子問題的最優解,那麼我...
動態規劃 編輯距離
求解編輯距離問題 一.演算法設計 這是一道經典的動態規劃問題,兩個字串的對齊方式很多,如果要將所有的對齊方式都考慮一遍,演算法的效率將十分低下。分解子問題的辦法是看兩個字串的字首,現令e i,j 表示字串x與字串y的相應字首的編輯距離,則e n,m 就是所求的答案。對於三種編輯操作的變化,對於e i...