Leetcode 一次編輯

2021-10-04 15:41:48 字數 1161 閱讀 8898

字串有三種編輯操作:插入乙個字元、刪除乙個字元或者替換乙個字元。 給定兩個字串,編寫乙個函式判定它們是否只需要一次(或者零次)編輯。

示例 1:

輸入: 

first = "pale"

second = "ple"

輸出: true

示例 2:

輸入: 

first = "pales"

second = "pal"

輸出: false

分兩種情況討論:

如果兩個字串長度如果相等的話,可以直接求最長公共子串行的長度,同時要求這些子串行的下標對應,

如果最長公共子串行的長度大於等於字串的長度- 1的話,說明是進行了替換或零操作;

如果兩個字串的長度不相等的話,先使用動態規劃求得最長公共子串行的長度,

如果兩個字串的長度相差1,且最長公共子串行的長度等於其中乙個字串的長度,說明進行了插入或刪除操作

class solution 

// 處理兩個字串長度不相等的情況,這裡使用動態規劃計算兩個字串的最長公共子串行

vector> dp(lensecond+ 1, vector(lenfirst+ 1, 0));

for(int i= 1; i<= lensecond; i++)

}// 最長公共子串行的長度

int commonlen= dp[lensecond][lenfirst];

// 在兩個字串長度不相等的情況下,只有插入和刪除操作才會使true

// 插入和刪除操作都會使兩個字串的長度相差1,並且只有其中乙個字串使另乙個字串的子串行才會使true

return abs(lenfirst- lensecond)== 1&& (lenfirst== commonlen|| lensecond== commonlen);

}};

通過計算從其中乙個字串變化到另乙個字串需要多少次操作,

如果操作次數少於等於1則返回true

class solution 

}// 編輯距離小於等於1

return dp[lenfirst][lensecond]<= 1;

}};

LeetCode 01 05 一次編輯

字串有三種編輯操作 插入乙個字元 刪除乙個字元或者替換乙個字元。給定兩個字串,編寫乙個函式判定它們是否只需要一次 或者零次 編輯。輸入 first aple second ple 輸出 true 比較字串的長度 若math.abs first.length second.length 1,返回fal...

LeetCode 字串 一次編輯

輸入 first pale second ple 輸出 true 輸入 first pales second pal 輸出 false 使用和編輯距離一樣的方法計算兩個字串的編輯距離,然後判斷編輯距離是否小於等於 1。如下 class solution if dp m n 1 return true...

01 05 一次編輯

開始想使用鍊錶解決,發現替換的操作不容易操作。這個陣列的splice方法確實很有幫助。param first param second return var oneeditaway function first,second var maxlength diff 0?first.length sec...