2019-08-05 EP161 One Edit Distance

image.png

這個道題目一咋看,很多人肯定會覺得直接DP,因為這種是典型的DP的題目,初始條件很容易想到,推導(dǎo)式也很容易想到,寫起來清晰明了

class Solution {
public:
    bool isOneEditDistance(string s, string t) {
        vector<vector<int>> dp(s.size() + 1, vector<int>(t.size() + 1, 0));
        
        for (int i = 0; i <= s.size(); i++) {
            dp[i][0] = i;
        }
        
        for (int j = 0; j < t.size(); j++) {
            dp[0][j] = j;
        }
        
        for (int i = 1; i <= s.size(); i++) {
            for (int j = 1; j <= t.size(); j++) {
                if (s[i - 1] == t[j - 1]) {
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    dp[i][j] = min(dp[i - 1][j], min(dp[i][j - 1], dp[i - 1][j - 1])) + 1;
                }
            }
        }
        
        return dp[s.size()][t.size()] == 1;
    }
};

上面寫的二維數(shù)組可以通過滾動數(shù)組的方式降到1維,空間復(fù)雜度O(N),時間復(fù)雜度O(N^2)

仔細想一想,其他用DP的方式過重了,為什么呢?因為計算了所有的substring 是不是滿足one edit distance,可以通過更簡單直接的方法來優(yōu)化這個問題,如下面這個解法,關(guān)鍵點是

  • 如果兩個string 長度相等,那么有且只有其中的個char值不一樣
  • 如果兩個string 長度不相等,那么長度相差應(yīng)該有且等于1,且不同的地方之后應(yīng)該和原來的string相等
class Solution {
public:
    bool isOneEditDistance(string s, string t) {
        int m = s.size(), n = t.size();
        if (m > n) {
            return isOneEditDistance(t, s);
        }
        for (int i = 0; i < m; i++) {
            if (s[i] != t[i]) {
                if (m == n) {
                    return s.substr(i + 1) == t.substr(i + 1);
                }
                return s.substr(i) == t.substr(i + 1);
            }
        }
        return m + 1 == n;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 0. 動態(tài)規(guī)劃分析 0.1 動態(tài)規(guī)劃、遞歸和貪心算法的區(qū)別 動態(tài)規(guī)劃就是利用分治思想和解決冗余的辦法來處理問題,所...
    dreamsfuture閱讀 7,616評論 2 6
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,238評論 0 38
  • 前言 2. 實現(xiàn) Singleton 3. 數(shù)組中重復(fù)的數(shù)字 4. 二維數(shù)組中的查找 5. 替換空格 6. 從尾到...
    Observer_____閱讀 3,152評論 0 1
  • 一、基礎(chǔ)知識:1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,559評論 0 4
  • 生活如此多嬌,我卻有點焦躁。 畫幅小畫,治一治。
    Lillianwj閱讀 162評論 2 6

友情鏈接更多精彩內(nèi)容