码迷,mamicode.com
首页 > 其他好文 > 详细

HDU-1238-Substrings

时间:2014-12-06 11:16:18      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   ar   os   使用   sp   for   on   

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=1238

 

题意:给你n个字符串,找出最长公共子串。

解法: 找到长度最小的字符串,枚举所有子串,

这题我又学到了一个

C语言strstr()函数:返回字符串中首次出现子串的地址

头文件:#include <string.h>

strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:
    char *strstr( char *str, char * substr );

【参数说明】str为要检索的字符串,substr为要检索的子串。

【返回值】返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。

【函数示例】strstr()函数的使用。

#include<stdio.h>
#include<string.h>
int main(){
    // 也可以改成 char str[] = "http://see.xidian.edu.cn/cpp/u/xitong/";
    char *str = "http://see.xidian.edu.cn/cpp/u/xitong/";
    char *substr = "see";
    char *s = strstr(str, substr);
    printf("%s\n", s);
    return 0;
}

运行结果:
see.xidian.edu.cn/cpp/u/xitong/

 

代码

 

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define inf 1000
using namespace std;

 

int main(void)
{
int i,j,k,k1,k2,k3,t,n;
int f;
char a[110][110];
char s1[110],s2[110];
scanf("%d",&t);
while(t--)
{
int Max=0;
k1=inf;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",a[i]);
k2=strlen(a[i]);
if(k1>k2)
{
k1=k2;
f=i;
}
}
int len=strlen(a[f]);
for(i=0;i<len;i++)
{
for(j=i;j<len;j++)
{
for(k=i;k<=j;k++)
{
s1[k-i]=a[f][k];
s2[j-k]=a[f][k];
}
s1[j-i+1]=s2[j-i+1]=‘\0‘;
int flag=1;
for(k=0;k<n;k++)
{
if(!strstr(a[k],s1)&&!strstr(a[k],s2))
{
flag=0;
break;
}
}
int chang=j-i+1;
if(flag&&chang>Max)
{
Max=chang;
}
}
}
printf("%d\n",Max);
}
return 0;
}

 

HDU-1238-Substrings

标签:style   http   io   ar   os   使用   sp   for   on   

原文地址:http://www.cnblogs.com/liudehao/p/4147960.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!