演算法基礎 遞迴 求兩個字串的公共最長子序列長度

2022-06-12 13:27:08 字數 772 閱讀 4458

問題內容:

求兩個字串的公共最長子序列長度

注:子串行是乙個字串內部若干個元素,可以不連續;子串是連續的一串字元,此處不要有confusion

解題源**如下:

/**

* 求兩個字串公共子串行的最大長度

* 子串:中間必須連續

* 子串行:是字串中的一些元素

* @author

administrator *

*/public

class

dmo03

public

static

void

main(string args)

}

解題思路:

2.如果頭部不相等,則讓遞迴產生分支,利用math包裡的「max」方法,傳入兩種情況——假設字串是a、b兩個,則第一種情況傳入a字串去掉頭部之外的部分和b,第二種情況則傳入b字串除掉頭部之外的部分和a

3.設定遞迴退出條件,仔細想一下就可以知道,當某乙個字串的長度變為零時,最大子串行的長度就已經生成了,即判斷條件為(a的長度是否為為零||b的長度是否為零),如果是,則返回0

總結:關於遞迴邏輯分析的一點兒小技巧:只用管第一層遞迴所要做的事情,因為後面都是一樣的,只要把第一層的邏輯整理清楚,後面的直接丟到建立的函式裡就行了,一層一層的分析反而麻煩,是在搞不清的話,就把每一層的資料在紙上寫出來,寫出一兩層的時候邏輯就一目了然了,個人見解,有不當之處還請提出/抱拳/抱拳

希望對大家有所幫助

以上

求兩個字串最長公共字串

package com.test 求兩個字串最長公共字串,演算法 兩個字串形成乙個矩陣,將兩個字元不匹配的位置標記為0,c i j 中兩個字元相匹配的位置標記為n,其中n c i 1 j 1 1,其中沿正對角線方向最長的序列為兩個字串的最長公共子串行 public class lcs public ...

求兩個字串的最大公共字串

今天在csdn上面翻倒乙個問題 求兩個字串的最大公共子串,本來想用有限自動機來做,可惜當年編譯學的不著.b上網翻了翻相關介紹,有乙個演算法很巧妙 把字串1 長度m 橫排,串2 長度n 豎排,得到乙個m n的矩陣c,矩陣的每個元素的值如下,如果m i n j 則c j i 1,否則,c j i 0。然...

求兩個字串的距離

給定兩個長度相等的,由小寫字母組成的字串s1和s2,定義s1和s2的距離為兩個字串有多少個位置上的字母不相等。現在牛牛可以選定兩個字母x1和x2,將s1中的所有字母x1均替換成x2。x1和x2可以相同 牛牛希望知道執行一次替換之後,兩個字串的距離最少為多少。x1和x2是自己求的,未知 輸入 aaa ...