給定兩個字串,已知可以使用三種方式進行變換
插入乙個字元
刪除乙個字元
更改乙個字元
請設計乙個演算法,找到兩個字串之間的經歷幾次最小變換,可以字串1轉換成字串2。
這是一道典型的編輯距離的題目,即字串str1至少需要多少步才能到達字串str2。使用動態規劃的方法,dp[i][j]表示字串str的子串str1.substr(0,i)至少需要多少步到達str2的子串str2.substr(0,j)。
當str[i]=str[j]時dp[i][j]=dp[i-1][j-1],也就是說這裡預設認為是在dp[i-1][j-1]的基礎上進行變化是最小的,但實際上因為str1i]與str2[j]並沒有參與str1.substr(0,i-1)與str2.substr(0,j-1)的變換中去,所以不能肯定利用這兩個字元的資訊會不會獲得更短的路徑,比如str1.substr(0,i-1)是ab,而str2.substr(0,j-1)是ca,str2[j]=c,這樣dp[i-1][j]=1,但是dp[i-1][j-1]=2,也就是說str2[j]這個字元加入到變換之中可能會產生更簡單的變換方式,同時str1[i]也是,那麼dp[i][j]=min(dp[i][j],dp[i-1][j]+1,dp[i][j-1]+1),這裡dp[i-1][j]+1中的加1是指刪除str1[i]就可以達到dp[i][j]。
#include
#include
#include
using
namespace std;
intmin
(int a,
int b)
intmain()
cout<[len2]
}
編輯字串距離
題目 題意 編輯距離,又稱levenshtein距離 也叫做edit distance 是指兩個字串之間,由乙個轉成另 乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪 除乙個字元。例如將kitten轉化成sitting sitten k s sittin ...
字串編輯距離
題目描述 給定乙個源串和目標串,能夠對源串進行如下操作 在給定位置上插入乙個字元 替換任意字元 刪除任意字元 寫乙個程式,返回最小運算元,使得對源串進行這些操作後等於目標串,源串和目標串的長度都小於2000。關於字串最短編輯距離的解題思路 給定相關資料的定義 mep i j 表示源字串source ...
字串編輯距離
給出兩個單詞word1和word2,寫乙個函式計算出將word1 轉換為word2的最少操作次數。你總共三種操作方法 1 插入乙個字元 2 刪除乙個字元 3 替換乙個字元 格式 輸入行輸入兩個字串 word1 和 word2,最後輸出將 word1 轉換為 word2的最少操作次數 樣例輸入 wor...