最長公共子串行問題解析

2022-07-20 21:39:13 字數 981 閱讀 2673

最長公共子串行問題,就是找出兩個字串中,存在的最長的子串行

什麼是子串行呢?

子串行不同於公共子串,子串是每個字元連續的,子串行不一定要連續,見下例[example]

[example]:比如 mstringa = "abc11google11111111", mstringb = "1111111141615" 這兩個字串

那麼,mstringa 和 mstringb 的最長公共子串行就是1111111111

我們對於問題進行白話講解,假如現在有兩個字串,並且有兩個指標,這每個指標,各自指向這兩個字串,我們把這兩個指標設定為 i 和 j,即,i 指向 mstringa 的某個字元,j 指向 mstringb 的某個字元,那麼,此時的狀態方程為f(i, j),表示 i 指向 mstringa 的某個字元和 j 指向 mstringb 的某個字元的情況

package com.company;

import org.junit.test;

public class longestcommonsequence

// 最長公共子串行的實現方法

public int longestcommonsequence(int i, string mstringa, int j, string mstringb)

// 2. 當兩個指標指向的字元相等的時候,這是狀態方程為:f(i + 1, j + 1) + 1

if (mstringa.charat(i) == mstringb.charat(j)) else

}// 測試方法

@test

public void test()

}

最長公共子串行問題解析

最長公共子串行問題,就是找出兩個字串中,存在的最長的子串行 什麼是子串行呢?子串行不同於公共子串,子串是每個字元連續的,子串行不一定要連續,見下例 example example 比如 mstringa abc11google11111111 mstringb 1111111141615 這兩個字串...

題解 最長公共子串行

描述 乙個給定序列的子串行是在該序列中刪去若干元素後得到的序列。確切地說,若給定序列x 則另一串行z 是x的子串行是指存在乙個嚴格遞增的下標序列,使得對於所有j 1,2,k有 xij zjx z jxij zj 例如,序列z 是序列x 的子串行,相應的遞增下標序列為 2,3,5,7 給定兩個序列x和...

最長公共子串行LCS C 題解

題目大意 兩個字串a和b,需要統計出其中公共子串行的最長是多少。注意 所謂子串行,指的是出現的先後順序一樣,但可以不連續出現。比如對於s abdef,其中adf是s 的乙個子串行,因為對於adf中每個字元,其出現的先後順序與s中先後順序一致。最長公共子串行 longest common subseq...