最長公共子串(Longest Common Substring)
阿新 • • 發佈:2019-01-07
#include <iostream> using namespace std; int dp[30][30]; int maxlen; /* 記錄最大公共子串長度 */ int maxindex; /* 記錄最大公共子串在串1的起始位置 */ void LCS(char * X, int xlen, char * Y, int ylen) { maxlen = maxindex = 0; for(int i = 0; i < xlen; ++i) { for(int j = 0; j < ylen; ++j) { if(X[i] == Y[j]) { if(i && j) { dp[i][j] = dp[i-1][j-1] + 1; } if(i == 0 || j == 0) { dp[i][j] = 1; } if(dp[i][j] > maxlen) { maxlen = dp[i][j]; maxindex = i + 1 - maxlen; } } } } for (int i = 0; i < maxlen; i++) { printf("%c", X[maxindex+i]); } printf("\n"); } int main() { char X[] = "aaaba"; char Y[] = "abaa"; LCS(X,strlen(X),Y,strlen(Y)); return 0; }