最長公共子串行

2021-09-10 18:14:24 字數 966 閱讀 5570

time limit: 1000 ms memory limit: 32768 kib

submit

statistic

problem description

從乙個給定的串中刪去(不一定連續地刪去)0個或0個以上的字元,剩下地字元按原來順序組成的串。例如:「 」,「a」,「xb」,「aaa」,「bbb」,「xabb」,「xaaabbb」都是串「xaaabbb」的子串行。(例子中的串不包含引號。)

程式設計求n個非空串的最長公共子串行的長度。限制:2<=n<=100;n個串中的字元只會是數字0,1,…,9或小寫英文本母a,b,…,z;每個串非空且最多含100個字元;n個串的長度的乘積不會超過30000。

input

檔案第1行是乙個整數t,表示測試資料的個數(1<=t<=10)。接下來有t組測試資料。各組測試資料的第1行是乙個整數ni,表示第i組資料中串的個數。各組測試資料的第2到n+1行中,每行乙個串,串中不會有空格,但行首和行末可能有空格,這些空格當然不算作串的一部分。

output

輸出t行,每行乙個數,第i行的數表示第i組測試資料中ni個非空串的最長公共子串行的長度。

sample input

13ab

bccd

sample output

0
**如下:

#include #include #include int max2(int a,int b)

int min2(int a,int b)

else //否則,求刪去某個字串的最後乙個字元之後得到的最大值

}dp[index]=ret;

return ret;

}int main()

memset(dp,-1,sizeof(dp));

printf("%d\n",lcs(temp));

}return 0;

}

最長公共子串行 最長公共子串

1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...

最長公共子串行 最長公共子串

1.區別 找兩個字串的最長公共子串,這個子串要求在原字串中是連續的。而最長公共子串行則並不要求連續。2 最長公共子串 其實這是乙個序貫決策問題,可以用動態規劃來求解。我們採用乙個二維矩陣來記錄中間的結果。這個二維矩陣怎麼構造呢?直接舉個例子吧 bab 和 caba 當然我們現在一眼就可以看出來最長公...

最長公共子串 最長公共子串行

子串要求連續 子串行不要求連續 之前的做法是dp求子序列 include include include using namespace std const int inf 0x3f3f3f3f const int mod 1000000007 string s1,s2 int dp 1010 10...