#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 比較二維矩陣中每個點對應行列字元中否相等,相等的...