想找個方式記錄一下自己的學習的歷程,思來想去沒有什麼好方法。所以,乾脆裝個b寫個部落格吧!
當然**都是各處搬運的!我們只是**的搬運工!
問題描述:
字串行的子串行
是指從給定字串行中隨意地(不一定連續)去掉若干個字元(可能乙個也不去掉)後所形成的字串行
。......(打符號太麻煩,此處省略,反正我不是寫來給別人看得!!?)
求解:利用遞迴的思想:如果c(i-1,j-1)是a前i位和b前j位字串的最大公共子串長度,那麼
int c[100][100];//初始化為零
int b[100][100];//用來記錄移動的方向
inline int issame(char a,char b)
int lcs(string str1,string str2)
else
//如果不相等,那麼取c[i-1][j-1],c[i][j-1],c[i-1][j]中的最大者
//由於後兩個必定不小於第乙個,因此只要考慮c[i][j-1]和c[i-1][j]
if(c[i-1][j]>=c[i][j-1])
else
//如果不用寫出字串的話只要一行**
//c[i][j]=max(max(issame(str1[i-1],str2[j-1])+c[i-1][j-1],c[i-1][j]),c[i][j-1]);
} return c[len1][len2];
}void printlcs(string str1,string str2,int n,int m)
{ //回溯法列印
if(n==0||m==0)
return;
if(b[n][m]==1)//1表示新增了乙個相同的字元
{ printlcs(str1,str2,n-1,m-1);
cout<
動態規劃查詢最大公共子串行
使用二維陣列c m,n c i,j 記錄序列xi和yj的最長公共子串行的長度 當i 0或j 0時,空序列是xi和yj的最長公共子串行,故c i,j 0 以上x和y進行一 一對比,a和b不相等,則比較它的左邊那個數和上邊那個數他們兩誰大 a和d比較,不相等,同理 直達a和a相比,相等,則它的左上角那個...
java 動態規劃最大公共子串行問題
剛開始按照自己的思路寫出來結果是不多了,而且還出現了陣列越界異常,在一點點的修改下,終於對了,但是還有很多可以改進的地方 package first 最長公共子串行 public class lcs string b new string int m a.length int n b.length ...
動態規劃 最大公共子串行長度問題
昨晚部門出去吃火鍋,十來個人有說有笑的,感覺很不錯,不過因此昨天的 每日一題 也就沒時間了,現在補上。問題 有兩個字串a a1 a2 a3 an和b b1 b2 b3 bm,求兩者的最大公共子串行的長度,這裡的公共子串行就是相同的兩個字串中字元相同的子串行。如 abcdefg 和 acghlm的最大...