| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 554 人关注过本帖
标题:求字符串公共子串?
只看楼主 加入收藏
csz88999
Rank: 1
来 自:云南
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-6-1
收藏
 问题点数:0 回复次数:4 
求字符串公共子串?
求N个的最长公共子串,N<=20,字符串长度不超过255。
例如:N=3,由键盘依次输入三个字符串为
What is local bus ?
Name some local buses.
local bus is a high speed I/O bus close to the processer.
则最长为"local bus"。

在TC2.0下运行.
搜索更多相关主题的帖子: 字符 
2007-06-21 08:54
csz88999
Rank: 1
来 自:云南
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-6-1
收藏
得分:0 

怎么没人回呀?是不是没人会呢?


2007-06-21 13:27
huangfengchu
Rank: 1
等 级:新手上路
威 望:2
帖 子:274
专家分:0
注 册:2007-5-22
收藏
得分:0 

这问题比较麻烦,要先比较出三个串里共同拥有的子串,算法比较麻烦,自己去看看KMP算法,懂了就会了,我现在都还在研究,好难懂。


深山苦学C语言,终年不见外面世界。
2007-06-21 13:47
csz88999
Rank: 1
来 自:云南
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-6-1
收藏
得分:0 

哦,那我先去看一下呀,不过我有可能看不懂哟!
不知有没有人会?


2007-06-22 20:46
csz88999
Rank: 1
来 自:云南
等 级:新手上路
帖 子:45
专家分:0
注 册:2007-6-1
收藏
得分:0 

#include <stdio.h>
#include <string.h>
#define MAXN 20
#define MAXL 256
int n;
int len[MAXN];
char str[MAXN][MAXL];

int match(char *s1,char *s2,int len)
{
while (len--)
{
if (*s1!=*s2) return 0;
s1++;
s2++;
}
return 1;
}

main()
{
int i,j;
int ans,ansi;
char line[100];
scanf("%d",&n);
gets(line);
for (i=0;i<n;i++)
{
gets(str[i]);
len[i]=strlen(str[i]);
}
ans=-1;
for (j=len[0];ans==-1 && j>0;j--)
for (i=0;ans==-1 && i+j-1<len[0];i++)
{
int flag1,k;
flag1=1;
for (k=1;flag1 && k<n;k++)
{
int flag2,s;
flag2=0;
for (s=0;!flag2 && s+j-1<len[k];s++)
if (match(str[0]+i,str[k]+s,j)) flag2=1;
if (!flag2) flag1=0;
}
if (flag1)
{
ans=j;
ansi=i;
}
}
if (ans==-1) puts("No common substrings!");
else
{
for (i=0;i<ans;i++) putchar(str[0][i+ansi]);
putchar('\n');
}
}

这个应该对吧!用的好好像是枚举法.


2007-07-04 15:26
快速回复:求字符串公共子串?
数据加载中...
 
   



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

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