問題:有兩個字串str和str2,求出兩個字串中最長公共子串長度。
比如:str=acbcbcef,str2=abcbced,則str和str2的最長公共子串為bcbce,最長公共子串長度為5。
演算法思路:
1、把兩個字串分別以行和列組成乙個二維矩陣。
2、比較二維矩陣中每個點對應行列字元中否相等,相等的話值設定為1,否則設定為0。
3、通過查詢出值為1的最長對角線就能找到最長公共子串。
針對於上面的兩個字串我們可以得到的二維矩陣如下:
從上圖可以看到,str1和str2共有5個公共子串,但最長的公共子串長度為5。
為了進一步優化演算法的效率,我們可以再計算某個二維矩陣的值的時候順便計算出來當前最長的公共子串的長度,即某個二維矩陣元素的值由record[i][j]=1演變為record[i][j]=1 +record[i-1][j-1],這樣就避免了後續查詢對角線長度的操作了。修改後的二維矩陣如下:
c++**實現如下:
string getlcs(string str1, string str2)
else
}else
if (record[i][j] > maxlen)
} return str1.substr(maxend - maxlen + 1, maxlen);
}
求兩個字串的最長公共子串
def longestcommonsequence str one,str two,case sensitive true str one 和 str two 的最長公共子串行 param str one 字串1 param str two 字串2 正確結果 param case sensitive...
求兩個字串的最長公共子串
採用乙個二維矩陣來記錄中間結果,矩陣的橫座標為字串1的各個字元,矩陣的縱座標為字串2的各個字元。舉例說明 假設兩個字串分別為 bab 和 caba 當然我們現在一眼就可以看出來最長公共子串是 ba 或 ab b a b c 0 0 0 a 0 1 0 b 1 0 1 a 0 1 0 可以看出,矩陣的...
求兩個字串的最長公共子串
直接上 需要使用時直接呼叫即可。求字串的最長公共子串 public class maxstringdemo public static intset string aa,string bb public static stringbuilder maxutil2 string str1,string...