題目詳情請見:求字串的最長公共子串行
在上題求出子串行長度基礎上,我們要求出子串行本身長什麼樣
思路:在求最大長度的時候,我把當前最大長度的**記下來,用path陣列儲存
1:當前string1[i] == string2[j]
2:當前string[i] != string2[j],並且dp[i - 1] [j] > dp[i] [j – 1]
3:當前string[i] != string2[j],並且dp[i - 1] [j] < dp[i] [j – 1]
再利用遞迴方法求出具體的子字串
/**
* 求出最長公共子串行
* @param text1
* @param text2
* @return 具體的子字串
*/public string longestcommonsubsequence
(string text1, string text2)
else}}
stringbuilder stringbuilder =
newstringbuilder()
;return
getpath
(text1, len1, len2 ,path, stringbuilder);}
/** * 根據path找到字串路徑(遞迴)
* @param len1
* @param len2
* @param path
* @return 目標子字串
*/private string getpath
(string text1,
int len1,
int len2,
int[
] path, stringbuilder stringbuilder)
if(path[len1]
[len2]==1
)else
if(path[len1]
[len2]==2
)else
return stringbuilder.
tostring()
;}
執行結果:
求最長公共子串行
問題 求兩字串行的最長公共字元子串行。這裡注意子串行和子串的區別,子串行可以是從原字串中取出一部分元素重新拼接而成的字串,但取出的元素之間的前後關係要與原字串一致 而子串則必須是連續的。如 adf 是 abcdef 的子串行,而不是子串。分析與解法 設序列x 和y 的最長公共子串行為z 則 若xm ...
求最長公共子串行
字串行的子串行是指從給定字串行中隨意地 不一定連續 去掉若干個字元 可能乙個也不去掉 後所形成的字串行。令給定的字串行 x x0,x1,xm 1 序列 y y0,y1,yk 1 是 x 的子串行,存在 x的乙個嚴格遞增下標序列 i1,ik 1 使得對所有的 j 0,1,k 1 有 xij yj 例如...
求最長公共子串行和最長公共子串
輸入描述 輸入為兩行字串 可能包含空格 長度均小於等於50。輸出描述 輸出為乙個整數,表示最長公共連續子串的長度。輸入例子 abcde abgde 輸出例子 2題解 例如 str1 abcde str2 abgde matrix 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0...