永发信息网

Pascal 216号错误

答案:2  悬赏:60  手机版
解决时间 2021-04-24 18:04
  • 提问者网友:练爱
  • 2021-04-24 09:56

麻烦看一下 这是最长公共子序列 数组z的问题啊

Var
i,j,k,m,n:Longint;
a,b,c:String;
f:Array[0..10000,0..1000]Of Longint;
z:Array[0..10000,0..10000]Of String;
Begin
Readln(a);
Readln(b);
m:=Length(a);
n:=Length(b);
For i:=1 To m Do

For j:=1 To n Do

If a[i]=b[j] Then
Begin
f[i,j]:=f[i-1,j-1]+1;
z[i,j]:=z[i-1,j-1]+a[i];
End
Else
If f[i-1,j]>f[j-1,i]Then
Begin
z[i,j]:=z[i-1,j];
f[i,j]:=f[i-1,j];
End
Else
Begin
z[i,j]:=z[i,j-1];
f[i,j]:=f[i,j-1];
End;
Writeln(z[m,n]);
Write(f[m,n]);
End.

最佳答案
  • 五星知识达人网友:罪歌
  • 2021-04-24 11:12
216 General protection fault 存取非法
全部回答
  • 1楼网友:逐風
  • 2021-04-24 12:48
数组z占空间太多了,要开小点。如果你想输出最大公共子串的话,可以用数组记录该子串“从何而来”,当最大公共字串的长度是在f[i,j]时,我已经知道了最后一位相同的字符,那么只需要知道上一位相同的字符的位置就可以了。如果每一个匹配位置都知道上一位相同字符的位置,那最后就可以从后往前找到各个匹配位置,按顺序输出就可以了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯