演算法作業 求兩個字串的最長公共子串

2021-09-22 12:44:37 字數 1132 閱讀 7432

#include#include#include//字串的資料結構 順序表示

struct seqstring;

typedef struct seqstring *pseqstring;

//建立乙個新的字串

pseqstring createemptystr_seq(int m)

else free(pstr);

} printf("out of space!\n");

return null;

}int index(pseqstring t,pseqstring p)

else

if(i > p->n)

return 1;

else

return 0;

}//求乙個字串的子串

pseqstring substr_seq(pseqstring s, int i, int j)

return sp;

}int main()

s1->n = a;

printf("please input s2:");

for(j=0;j<=b;j++)

s2->n = b;

//最樸素的思路,直接把s1當中所有的不包括空字串的子集拿出來和s2作比較,記錄最長的那個

for(i=1;i<=a;i++)

}else

// printf("%d\n",index(s,s2));

}// if(index(s2,s)!=0 && max <= j-i+1)

// max = j-i;

}} // if(max != 0)

// printf("%d\n",max);

for(i=1;i<=max;i++)

return 0;}

效果如下: 

本演算法上機即可執行,但是有許許多多值得優化的地方

下面列出幾處需要優化的地方:

(1)可以kmp演算法來代替樸素對比的演算法;並比較執行時間

(2)比較的方式也可以做改變,並不需要全部比較,可以引入一些思想改變對比方式。

求兩個字串最長公共字串

package com.test 求兩個字串最長公共字串,演算法 兩個字串形成乙個矩陣,將兩個字元不匹配的位置標記為0,c i j 中兩個字元相匹配的位置標記為n,其中n c i 1 j 1 1,其中沿正對角線方向最長的序列為兩個字串的最長公共子串行 public class lcs public ...

java求兩個字串最長公共字串

思路 將str1的字元用兩個for迴圈用substring i,j 逐段截出,再與str2內字串比較,從而選出最長公共的字串,從而輸出字元內串 public class similarstring for int i 0 i str1.length 1 i system.out.println 兩字...

求兩個字串的最長公共子串

問題 有兩個字串str和str2,求出兩個字串中最長公共子串長度。比如 str acbcbcef,str2 abcbced,則str和str2的最長公共子串為bcbce,最長公共子串長度為5。演算法思路 1 把兩個字串分別以行和列組成乙個二維矩陣。2 比較二維矩陣中每個點對應行列字元中否相等,相等的...