讨论 / 代码
vinence 2010-08-20 02:01:00
点我顶贴 收藏 删除
var

a,b,ls1,ls2,out:ansistring;

l1,l2,ml:integer;

f:array[1..1000,1..1000] of integer;

fa:array[1..1000] of integer;

i,j,k:integer;

procedure try;

begin

for j:=1 to l2-i+1 do

if j>ml then

begin

ls1:=copy(a,i,j);

for k:=1 to l2-j+1 do

begin

ls2:=copy(b,k,j);

if (ls1=ls2) and (j>ml) then

begin

ml:=j;

out:=ls1;

end;

end;

if ls1<>out then exit;

end;

end;

begin

readln(a);

readln(b);

l1:=length(a);

l2:=length(b);

for i:=1 to l1 do try;

writeln(out);

end.

==================================================

状态题目:最长公共子串

状态编号: [查看该题]

状态: Accepted

测评机: Xeost[5]

得分: 100分

提交日期: 2008-7-26 23:47:00

有效耗时: 该状态没有记录

测试结果1: 测试结果正确

测试结果2: 测试结果正确

测试结果3: 测试结果正确

测试结果4: 测试结果正确

测试结果5: 测试结果正确

测试结果6: 测试结果正确

测试结果7: 测试结果正确

测试结果8: 测试结果正确

测试结果9: 测试结果正确

测试结果10: 测试结果正确

#1 binarie@2008-07-27 03:15:00
回复 删除
恭喜氧化钙神牛
#2 woshiniba@2008-09-20 05:43:00
回复 删除
谁能解释一下?提前3Q了……
#3 wish@2008-09-20 05:47:00
回复 删除
最长公共子序列(LCS)问题

自己查查相关资料,或研究研究算法导论动态规划一章的相关内容

#4 wish@2008-09-20 05:52:00
回复 删除
sorry 推翻 LS 论述

题目搞错了,这一题的子串为连续的

那么只需要搜索就可以了

ms 我朴素的搜索过掉了

#5 狼123@2008-10-28 00:57:00
回复 删除
谁解释一下啊???
#6 苍狼@2008-11-01 00:39:00
回复 删除
现在这个程序好象过不去了,只有70分
#7 苍狼@2008-11-01 00:55:00
回复 删除
说错了,ansistring写成string了,所以70分
#8 webeskycn@2009-06-06 02:41:00
回复 删除
我暴力了。。。

program zcggzc;

var

i,j,k,m,p,maxlen,start,js:longint;

stra,strb:ansistring;

procedure init;

begin

readln(stra);

readln(strb);

maxlen:=0; i:=0;

k:=length(stra);

end;

begin

init;

for i:=1 to k do

begin

for j:=1 to k do

begin

if strb[j]=stra[i] then

begin

m:=0;

js:=0;

for p:=j to k do

begin

inc(js);

if stra[i+js-1]=strb[p] then inc(m)

else

begin

if m>maxlen then begin start:=j; maxlen:=m; break; end;

break;

end;

if p=k then if m>maxlen then begin start:=j; maxlen:=m; break; end;

end;

end;

end;

end;

writeln(copy(strb,start,maxlen));

end.

#9 niu@2009-06-07 17:58:00
回复 删除
哪要这么麻烦~

var a,b,c,max:ansistring;

i,j:longint;

begin

readln(a);readln(b);

for i:=1 to length(a) do begin

for j:=i to length(a) do begin

c:=copy(a,i,j-i+1);

if (pos(c,b)<>0)and(length(c)>length(max))then max:=c;

end;

end;

writeln(max);

end.

#10 dxtdxt@2010-08-20 02:01:00
回复 删除
偶们FP终于占优势了

var

st1,st2,st,str:ansistring;

l,n,max,i,j,k:longint;

begin

readln(st1);

readln(st2);

l:=length(st1);

max:=0;

for i:=1 to l do begin

st:='';

for j:=i to l do begin

st:=st+st1[j];

n:=pos(st,st2);

if n<>0 then k:=length(st);

if k>max then begin

max:=k;

str:=st;

end;

end;

end;

writeln(str);

readln;

end.

查看更多回复
提交回复