九章演算法面試題36 交錯的字串

2021-07-02 12:41:08 字數 625 閱讀 6369

給定三個字串a, b, c,判斷c是否由a和b交錯構成。交錯構成的意思是,對於字串c,可以將其每個字元標記為a類或b類,使得我a類的每個字元順序構成了a字串,b類的每個字元順序構成了b字串。如:對於a=」rabbit」 b=」mq」, 」rabmbitq」是由a和b交錯構成的,但」rabbqbitm」不是由a和b交錯構成。

採用動態規劃演算法。令f[i][j]代表a中取前i個字元,b中取前j個字元,是否和c中的前i+j個字元交錯匹配。推導出狀態轉移方程:

f[i][j] = f[i-1][j] && a[i-1] == c[i+j-1] || f[i][j-1] && b[j-1] == c[i+j-1]

初始化:f[0][i] = b.prefix(i) == c.prefix(i); f[i][0] = a.prefix(i) == c.prefix(i);

時間和空間複雜度均為o(n^2)

兩個序列(or 字串)的動態規劃是常見的動態規劃面試題,最典型的例子如lcs問題(最長公共子串行)和edit distance(字串編輯距離)。其狀態的表示方法是類似的,均為f[i][j]代表a串的前i個字元和b串的前j個字元」匹配」起來的情況。如果理解了lcs這類問題,那麼本題本質上只是做了一些簡單的變換,思路上幾乎是一模一樣的。

九章演算法面試題55 旋轉字串

給乙個字串和乙個旋轉的偏移量offset,將字串迴圈右移offset位。如 abcdefg 迴圈右移 4位之後變為了 defgabc 要求做到o 1 的額外空間耗費,o n 的時間 採用三步反轉法。以s abcdefg offset 4為例子 首先將字串看做 abc defg 先整體反 得到 gfe...

九章演算法 Google 面試題 有效括號字串

撰文 jz 專欄 九章演算法 給定乙個字串,由 三個字元組成,判斷是否滿足要求左括號和有括號一一對應,且對應的左括號必定在右括號前面。其中,可以被當做乙個單獨的左括號,右括號或者可以當做不存在 1.input output true 2.input output true 被當做空字元,不存在 3....

九章演算法 Google面試題 字串解碼

給出乙個表示式 s 此表示式包括數字,字母以及方括號。在方括號前的數字表示方括號內容的重複次數 括號內的內容可以是字串或另乙個表示式 請將這個表示式展開成乙個字串。樣例1 輸入 s abc3 a 輸出 abcaaa 樣例2 輸入 s 3 2 ad 3 pf xyz 輸出 adadpfpfpfadad...