首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构 | 每日一练(103)

数据结构 | 每日一练(103)

作者头像
小林C语言
发布2019-07-05 17:18:22
4120
发布2019-07-05 17:18:22
举报

数据结构

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下

——老子

1

每日一练

1.下列算法实现求采用顺序结构存储的串 s 和串 t 的一个最长公共子串。程序(a)

PROCEDURE maxcomstr(VAR s,t : orderstring; VAR index,length : integer);

VAR i,j,k,length1:integer; con:boolean;

BEGIN

index :=0; length :=0; i :=1;

WHILE(i<=s.len) DO

[j:=1;

WHILE (j<=t.len) DO

[ IF (s[i]=t[j]) THEN

[ k:=1; length1:=1; con:=true;

WHILE con DO

IF (1)__THEN [length1:=length1+1;k:=k+1;] ELSE(2) _;

IF (length1>length) THEN [index:=i; length:=length1; ]

(3)____;

]

ELSE (4)____;

]

(5) ___;

]

END;

程序(b)

void maxcomstr(orderstring *s,*t; int index, length)

{int i,j,k,length1,con;

index=0;length=0;i=1;

while (i<=s.len)

{j=1;

while(j<=t.len)

{ if (s[i]= =t[j])

{ k=1;length1=1;con=1;

while(con)

if (1) _ { length1=length1+1;k=k+1; } else (2) __;

if (length1>length) { index=i; length=length1; }

(3)____;

}

else (4) ___;

}

(5) __

} }

正确答案

PS:||代表注释

1.[题目分析]本题算法采用顺序存储结构求串s和串t的最大公共子串。串s用i指针(1<=i<=s.len)。t串用j指针(1<=j<=t.len)。算法思想是对每个i(1<=i<=s.len,即程序中第一个 WHILE循环),来求从i开始的连续字符串与从j(1<=j<=t.len,即程序中第二个WHILE循环)开始的连续字符串的最大匹配。程序中第三个(即最内层)的 WHILE循环,是当s中某字符(s[i])与t中某字符(t[j])相等时,求出局部公共子串。若该子串长度大于已求出的最长公共子串(初始为0),则最长公共子串的长度要修改。程序(a):

(1)(i+k<=s.len)AND(j+k<=t.len) AND(s[i+k]=t[j+k])//如果在s和t的长度内,对应字符相等,则指针k 后移(加1)。

(2)con:=false //s和t对应字符不等时置标记退出

(3)j:=j+k //在t串中,从第j+k字符再与s[i]比较

(4)j:=j+1 //t串取下一字符

(5)i:=i+1 //s串指针i后移(加1)。

程序(b):(1) i+k<=s.len && j+k<=t.len && s[i+k]==t[j+k] //所有注释同上(a)(2) con=0 (3) j+=k (4) j++ (5) i++

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档