最長連續公共子串、最長公共子串(可以非連續)、最長回文串(連續)、最長回文串(可以不連續)、最長遞增數組的求解
阿新 • • 發佈:2017-05-06
鑲嵌 wid 方法 數量 子串 進行 遞增 動態 動態規劃
問題:最長連續公共子串、最長公共子串(可以非連續)、最長回文串(連續)、最長回文串(可以不連續)、最長遞增數組、長方形鑲嵌最多的求解
方法:上述問題有相似性,都可以采用動態規劃進行求解。
(1)最長連續公共子串:
如果A[i]==B[j], dp[i][j]=dp[i-1][j-1]+1;
否則,dp[i][j]=0;
(2)最長公共子串(可非連續):
如果A[i]==B[j], dp[i][j]=dp[i-1][j-1]+1;
否則,dp[i][j]=dp[i-1][j-1];
(3)最長回文串(可非連續):
先將原字符串A逆序得到新字符串B,然後采用最長公共子串(可非連續)進行求解。
(4)最長連續回文串:
先將原字符串A逆序得到新字符串B,然後采用最長連續公共子串進行求解。
(5)最長連續遞增數組:
如果A[i]>A[i-1],dp[i]=dp[i-1]+1;
否則,dp[i]=0;
(6)最長遞增數組(可非連續):
如果A[i]>A[i-1],dp[i]=dp[i-1]+1;
否則,dp[i]=dp[i-1];
(7)長方形鑲嵌數量:
先按照長方形的長進行升序排序(如果長一樣,寬大的排後邊);
如果A[i].length>A[i-1].length且A[i].width>A[i-1].width,則dp[i]=dp[i-1]+1;
否則,dp[i]=dp[i-1];
最長連續公共子串、最長公共子串(可以非連續)、最長回文串(連續)、最長回文串(可以不連續)、最長遞增數組的求解