(ssl1463)公共子串

本文介绍了一个寻找两个字符串之间的最长公共子串的问题及其解决方案。该问题要求子串中字符不可重复且顺序固定,并提供了一个使用动态规划方法实现的示例程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公共子串

Time Limit:1000MS  Memory Limit:65536K
Total Submit:198 Accepted:113

Description

设有A、B两个字符串,找出A、B共同子串,每个字符串无相同字符,可以不连续,但顺序不能颠倒。

Input

第一行字符串A 
第二行字符串B 

Output

最长公共子串的长度.

Sample Input

abcfbc
abfcab

Sample Output

4

Source

elba

var
 s,ss:string;
 f:array[0..1000,0..1000] of longint;
 i,j,len,len2:longint;
function max(a,b:longint):longint;//状态转移方程
begin
 if a>b then exit(a);
 exit(b);
end;
begin
 readln(s);
 read(ss);
 len:=length(s);
 len2:=length(ss);
 for i:=1 to len do
  for j:=1 to len2 do
   if s[i]=ss[j] then f[i,j]:=f[i-1,j-1]+1//如果它相同的话,那么公共字串的长度就是上一个加上它
                    else f[i,j]:=max(f[i-1,j],f[i,j-1]);//如果反之,那么它就继承之前最大的长度
 writeln(f[len,len2])//到了最后,也就全都汇集在末尾
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值