注意這裡講的是連續,也就是substring,不是subsquence
我們有兩個方法,動態規劃和直尺法。
dp:建乙個c[i][j]陣列,表示在第i比較中,最長的連續長度
#include
#include
#include
#include
#define n 500010
using
namespace
std;
int longest_substring(char *s1,char *s2)
for(j=0;j1;j++)
c[0][j]=0;
max=-1;
for(i=1;i1;i++)
else
c[i][j]=0;
if(c[i][j]>max)}}
char s[1000];
k=max;
i=x-1,j=y-1;
s[k--]='\0';
while(i>=0&&j>=0)
else
break;
}puts(s);
for(i=0;i1;i++)
delete c[i];
delete c;
return max;
}int main()
直尺法:
#include
#include
#include
#include
#define n 10010
/*直尺法:將短的一串從尾部開始進入和長的串頭部比較,直到短的頭部與長的尾部比較完畢
*/using
namespace
std;
int longest_substring(char *s1,char *s2)
}if(count>max)
}char s[1001];
for(i=0; i1+i];
s[i]='\0';
puts(s);
return max;
}int main()
求最長連續公共子串行和最長連續子字串
問題的關鍵是如何定義子問題。假設有 xm x1 x2 x3 xm yn y1 y2 y3 yn 1.最長公共子串行 不必連續 定義f m,n 為xm和yn之間最長的子串行的長度 於是有f m,0 f 0,m 0 如果xm yn,則f m,n max 如果xm yn,則f m,n f m 1,n 1 ...
字串最長連續子串
題目 求給定字串中連續出現次數最多的子串。例 abcbcbcabc,bc出現次數最多,為3次 分析 1 將字尾陣列依次存入字串陣列中 2 依次將第i個字串的長度為j i的子串與第j個字串相比,若相等,則比較j字串剩下有幾個子串與之相等 3 記錄每個子串出現的次數,並比較,保留最大的 pairfun ...
求最長字串與最短字串
description 有n個字串,找到最長的字串並輸出。input 測試資料有多組,第一行的正整數t表示測試資料的組數。每組的第一行給乙個正整數n n 10 表示該組測試資料中字串的個數,後跟n行,每行乙個字串 不超過100個字元,中間有可能包含空格 output 對於每組測試資料,輸出最長的字串...