#include
#include
using
namespace std;
/* * 最長公共子串問題-動態規劃
* dp[i][j]表示在必須將str1[i-1]和str2[j-1]作為公共子串最後乙個字元的情況下,公共子串最大長度
* dp[i][j]取決於dp[i-1][j], dp[i][j-1], dp[i-1][j-1]
* 時間複雜度o(mn) 空間複雜度o(mn)
*/class
solution
}return ret;
}// 返回最長公共子串
string longestcommonsubstring
(string &str1, string &str2)}}
return str1.
substr
(end - maxlen +
1, maxlen);}
// 返回最長公共子串:優化演算法-空間複雜度o(1)
// 因為dp[i][j]僅取決於dp[i-1][j-1]
// 按照平行於對角線的斜線方向計算,只需要乙個變數就可以計算出所有位置的值
string longestcommonsubstringii
(string &str1, string &str2)
++i;
++j;}if
(col >0)
--col;
else
++row;
}return str1.
substr
(end - maxlen +
1, maxlen);}
};intmain()
最長公共子串 最長公共子串 動態規劃
有兩個字串 可能包含空格 請找出其中最長的公共連續子串,輸出其長度。長度在1000以內 例如 輸入 abcde bcd 輸出 3 1 把兩個字串分別以行和列組成乙個二維矩陣。2 比較二維矩陣中每個點對應行列字元中否相等,相等的話值設定為1,否則設定為0。3 通過查詢出值為1的最長對角線就能找到最長公...
最長公共子串(動態規劃)
描述 計算兩個字串的最大公共子串 longest common substring 的長度,字元不區分大小寫。輸入 輸入兩個字串 輸出 輸出乙個整數 樣例輸入 asdfas werasdfaswer樣例輸出 6 參考 這裡的最大公共字串要求的字串是連續的。求字串的方法和求子序列方法類似 當s i t...
最長公共子串 動態規劃
題目 給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。示例 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。思想 動態規劃 步驟 第一步 確定子問題。在這一步重點是分析那些變數是隨著問題規模的變小而變小的,那些變數與問題的規模無關。第二步 確定狀態...