本題可以轉化為求編輯距離。題目限定為可以插入、刪除、替換乙個字元,這種編輯距離稱為萊溫斯坦距離,同樣經常遇到的還有漢明距離等。
字串有三種編輯操作:插入乙個字元、刪除乙個字元或者替換乙個字元。 給定兩個字串,編寫乙個函式判定它們是否只需要一次(或者零次)編輯。
示例 1
:輸入:
first =
"pale"
second =
"ple"
輸出: true
示例 2
:輸入:
first =
"pales"
second =
"pal"
輸出: false
演算法根據下圖所示遞推公式實現:
具體解法如下:
int
edit_distance
(char*,
char*)
;int
min_two
(int
,int);
intmin_three
(int
,int
,int);
bool oneeditaway
(char
* first,
char
* second)
intedit_distance
(char
* first,
char
* second)
for(j=
0;j<
(len_second+1)
;j++
)for
(i=1
;i<
(len_first+1)
;i++
)else
d[i]
[j]=
min_three
( d[i-1]
[j]+1,
d[i]
[j-1]+
1,d[i-1]
[j-1
]+cost
);}}return d[len_first]
[len_second];}
intmin_two
(int a,
int b)
intmin_three
(int a,
int b,
int c)
程式設計師面試金典 面試題 01 05 一次編輯
字串有三種編輯操作 插入乙個字元 刪除乙個字元或者替換乙個字元。給定兩個字串,編寫乙個函式判定它們是否只需要一次 或者零次 編輯。示例 1 輸入 first pale second ple 輸出 true示例 2 輸入 first pales second pal 輸出 false根據字串長度差值判...
程式設計師面試金典 面試題 08 09 括號
括號。設計一種演算法,列印n對括號的所有合法的 例如,開閉一一對應 組合。說明 解集不能包含重複的子集。例如,給出 n 3,生成結果為 dfs搜尋,如果當前左括號用超了,右括號用超了,或者右括號的數量大於左括號的數量直接返回。而如果左右括號剛好用盡,代表生成乙個結果,記錄下來。然後就是遞迴,新增左括...
程式設計師面試金典 面試題 08 13 堆箱子
堆箱子。給你一堆n個箱子,箱子寬 wi 高hi 深di。箱子不能翻轉,將箱子堆起來時,下面箱子的寬度 高度和深度必須大於上面的箱子。實現一種方法,搭出最高的一堆箱子。箱堆的高度為每個箱子高度的總和。輸入使用陣列 wi,di,hi 表示每個箱子。示例1 輸入 box 1,1,1 2,2,2 3,3,3...