字串求最長公共子串行 相似度計算

2021-07-26 02:20:15 字數 2343 閱讀 6437

方法一:

思想    

由大到小的擷取並返回 保證如果返回肯定是返回最大的

短字串的處方式:第一次for迴圈:遞減 。第二次for迴圈 :擷取該長度字串的可行方案個數     然後擷取

長字串長度處理方案:擷取"第一次擷取的字串" 可行方案個數  兩次擷取內容一致,返回

1、獲得最長公共子串行--可以 返回 「最長公共子串行的長度」 或者 「最長公共子串行」

public static  int  getmaxsubstr(     string  str1, string  str2)}}

}

寫了乙個注釋

public static  int  getmaxsubstr( string str1, string str2)}}

}

2、自定義相似度

public static  double getsimilardegree(     string  str1, string  str2)

3、測試

public static void main(string args) 

else

}

方法二 求 最長遞增子串行

使用回溯法

最長遞增序列不要求陣列元素連續問題,返回遞增序列長度和遞增序列。o(n^2)做法,順序比較以第i個元素開頭的遞增序列即可。

利用動態規劃來做,假設陣列為1, -1, 2, -3, 4, -5, 6, -7。我們定義lis[n]陣列,其中lis[i]用來表示以array[i]為最後乙個元素的最長遞增子串行。

使用i來表示當前遍歷的位置:

當i = 0 時,顯然,最長的遞增序列為(1),則序列長度為1。則lis[0] = 1

當i = 1 時,由於-1 < 1,因此,必須丟棄第乙個值,然後重新建立序列。當前的遞增子串行為(-1),長度為1。則lis[1] = 1

當i = 2 時,由於2 > 1,2 > -1。因此,最長的遞增子串行為(1, 2),(-1, 2),長度為2。則lis[2] = 2。

當i = 3 時,由於-3 < 1, -1, 2。因此,必須丟掉前面的元素,重建建立序列。當前的遞增子串行為(-3),長度為1。則lis[3] = 1。

依次類推之後,可以得出如下結論。

lis[i] = max, array[i] >array[k], for any k < i

最後,我們取max。

public static  void getlongestascsequence(int input,int size)

if (maxlen < arr[i])

}system.out.println(maxlen);

}

附:最大子陣列之積

題目描述: 給定乙個長度為n的整數陣列,只允許用乘法,計算任意(n-1)個數的組合中乘積最大的一組。

演算法分析: 動態規劃的做法,假設陣列為a[n],max[n]表示以下標為i結尾的子陣列乘積最大值,min[n]表示以下標為i結尾的子陣列乘積最小值。

為了處理陣列元素為負的問題,必須將最小乘積也儲存起來。 很容易想到,若當前元素a[i]為負數,那麼a[i]*max[i-1]得到的值並不一定比a[i] *min[i-1]大,

因為min[i-1]可能為負,如果min[i-1]的絕對值大於max[i-1],那麼a[i] *min[i-1]負負相乘的值則更大。

因此有以下轉移方程 求三者最大 max[i] = maxinthree(a[i], a[i]*max[i-1],a[i]*min[i-1])

求三者最小 min[i] = mininthree(a[i], a[i]*max[i-1], a[i]*min[i-1])

//a b 最大值與c比較 三者誰大取哪乙個值

static int maxinthree(int a, int b, int c)

static int minthree(int a, int b, int c)

static void getbiggestmultiofsubarray(int input,int size)

}system.out.println(product);

system.out.println(ls);

}public static void main(string args) ;

getbiggestmultiofsubarray(input,6);

}

如果想要得到 字串序列:其實x>0 可以加入list;當x<0 時,當有偶數個負數也可以加入list。

最長公共子串行與字串的相似度問題

字串的相似性 如果將乙個串轉換成為另乙個串所需的運算元最少,那麼可以說這兩個串是相似的。另外一種權衡的方法是,尋換第三個串s3,如果s3都出現在s1和s2中,且出現的順序相同,但不要求在s1和s2中連續,那麼s3的長度越大,就說明相似度越高。後一種對相似度概念命名為最長公共子串行。1 最長公共子串行...

最長公共字串和最長公共子串行

給出兩個字串,找到最長公共子串,並返回其長度。建立乙個矩陣來儲存兩個字串出現相同字元的地方,比如 abccd 和 abcefc 就有 abccd a10000 b02000 c00300 e00040 f00000 c00100 這樣就有每次遇到相等的都加上下他的斜上方的位置的值,然後使用乙個max...

求最長公共子串行和最長公共子串

輸入描述 輸入為兩行字串 可能包含空格 長度均小於等於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...