**:
求兩個串中的第乙個最長子串。
如"abractyeyt","dgdsaeactyey"的最大子串為"actyet"。
有乙個演算法很巧妙:
把字串1(長度m)橫排,串2(長度n)豎排,得到乙個m×n的矩陣c,矩陣的每個元素的值如下,如果m[i]=n[j],則c[j][i]=1,否則,c[j][i]=0。然後找出矩陣中連續是1的對角線最長的乙個,則對角線的長度就是公共子串的長度.
經過改進,可以不需要構造矩陣,因為第i行如果有字母匹配,其取值僅與第i-1行相關,若m[i]=n[j],則c[j][i] = c[j-1][i-1] + 1,這樣僅需要記錄乙個長度為m的一維陣列就可以了。
#include #include char * stringsearch( char * str1, char * str2 )
ptempbuffer2 = str2;
while( *ptempbuffer2 != '\0' )
ptempbuffer1 = ( char * ) malloc( str1size );
pwork = ptempbuffer1;
memset( pwork, 0, str1size );
ptempbuffer2 = ( char * ) malloc( str1size );
plast = ptempbuffer2;
memset( plast, 0, str1size );
for( i = 0; i < str2size; i++ )
else
if( resultlength < *( pwork + j ) )
}else
}ptemp = pwork;
pwork = plast;
plast = ptemp;
}retstr = ( char * ) malloc( resultlength + 1 );
memcpy( retstr, str1 + resultindex - resultlength + 1, resultlength );
*( retstr + resultlength ) = '\0';
printf( "resultindex = %d, resultlength = %d\n", resultindex, resultlength );
free( ptempbuffer1 );
free( ptempbuffer2 );
return retstr;
}int main(int argc, char *argv)
求兩個字串的最大公共子串
求兩個字串的最大公共子串 演算法原理 lcs i,j 0 i 0 j 0 lcs i 1,j 1 i 0 b 0 str1 i str2 j 1 構造乙個str1.size str2.size 的矩陣vec 2 如果 str1 i str2 j 則vec i j vec i 1 j 1 1 lcs ...
求兩個字串的最大公共子串
題目 求兩個字串的最大公共子串.例如字串a abcdefg 字串b cdeab 分析 從兩個字串的那個較短的字串出發,求其全部子串,判斷每乙個子串是不是那個長串的子串,求子串過程本著由長到段的原則,這樣可以保證第一次匹配到的子串就是最大的公共子串。char get common string cha...
求兩個字串的最大公共字串
今天在csdn上面翻倒乙個問題 求兩個字串的最大公共子串,本來想用有限自動機來做,可惜當年編譯學的不著.b上網翻了翻相關介紹,有乙個演算法很巧妙 把字串1 長度m 橫排,串2 長度n 豎排,得到乙個m n的矩陣c,矩陣的每個元素的值如下,如果m i n j 則c j i 1,否則,c j i 0。然...