| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3513 人关注过本帖
标题:[求助]求两个字符串的最大公共子串
只看楼主 加入收藏
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
结帖率:100%
收藏
 问题点数:0 回复次数:4 
[求助]求两个字符串的最大公共子串
前些天老师布置了一个这样的题,我想了好久都没有思路,蛮困惑的。
不知道哪位有一些有的算法,把你们的思路和我分享一下吧。
搜索更多相关主题的帖子: 字符 
2007-04-24 21:47
海蓝啸
Rank: 5Rank: 5
来 自:安徽
等 级:贵宾
威 望:17
帖 子:1611
专家分:0
注 册:2006-4-3
收藏
得分:0 
设两个数组 char a[20],b[20]; char *p=a,*q=b;
先找出*p在数组b中相同的字符*(q+i),若没有则判断*(p+1),若有则接着判断*(p+1)与*(q+i+1)是否相等,若相等则继续,如此下去直到遇到不相等的或数组b越界,结束本次比较(一次循环)..记录下相同字符的个数以及第一个相同字符在任意一个数组中的地址(为最后输出所用)。。。。。如此判断下去,直到第一个数组比较结束,则就可以找出最大公共字符串

这个社会太复杂。。。
2007-04-24 23:24
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 

哦 知道了。。。谢过


~~我的明天我知道~~
2007-04-25 07:26
我黑白
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-4-14
收藏
得分:0 

上面说的我不知道可行,不过我们现在在上的算法设计中就一个对于这个问题的解法,好像用的是动态规化吧!

2007-04-25 13:53
wood1314
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2007-4-21
收藏
得分:0 

这是动态规划 我看不懂,觉得用2楼的方法就可以了. 问一句: kmp属于动态规划吗?
动态规划如下:
include <stdio.h>
# include <string.h>
# define N 100
char a[N],b[N],str[N];

int lcs_len(char *a, char *b, int c[ ][ N])
{ int m=strlen(a), n=strlen(b), i,j;
for (i=0;i<=m;i++) c[i][0]=0;
for (i=0;i<=n;i++) c[0][i]=0;

for (i=1;i<=m;i++)
for (j=1;j<=m;j++)
if (a[i-1]==b[j-1])
c[i][j]=c[i-1][j-1]+1;
else if (c[i-1][j]>=c[i][j-1])
c[i][j]=c[i-1][j];
else
c[i][j]=c[i][j-1];
return c[m][n];
}

char *buile_lcs(char s[ ],char *a, char *b)
{ int k, i=strlen(a), j=strlen(b);
k=lcs_len(a,b,c);
s[k]=’\0’;
while (k>0)
if (c[i][j]==c[i-1][j]) i--;
else if (c[i][j]==c[i][j-1]) j--;
else { s[--k]=a[i-1];
i--; j--;
}
return s;
}

void main()
{ printf (“Enter two string(<%d)!\n”,N);
scanf(“%s%s”,a,b);
printf(“LCS=%s\n”,build_lcs(str,a,b));
}

2007-04-25 14:28
快速回复:[求助]求两个字符串的最大公共子串
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015558 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved