poj1226

原创 2012年03月24日 23:34:32
Substrings
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 8467   Accepted: 2890

Description

You are given a number of case-sensitive strings of alphabetic characters, find the largest string X, such that either X, or its inverse can be found as a substring of any of the given strings.

Input

The first line of the input contains a single integer t (1 <= t <= 10), the number of test cases, followed by the input data for each test case. The first line of each test case contains a single integer n (1 <= n <= 100), the number of given strings, followed by n lines, each representing one string of minimum length 1 and maximum length 100. There is no extra white space before and after a string.

Output

There should be one line per test case containing the length of the largest string found.

Sample Input

2
3
ABCD
BCDFF
BRCD
2
rose
orchid

Sample Output

2
2 
这个题目式模式匹配的一个问题,就是在多个字符串中找最大子串。。。。

# include<stdio.h>
# include<string.h>
int main()
{
       int i,j,k,n,t,len,flag,minlen;
       char str[110][110],a[110],b[110],c[110];
       scanf("%d",&t);
       while(t--)
       {
              scanf("%d",&n);
              minlen=220;
              flag=0;
              for(i=0;i<n;i++)     //因为公共子串的长度不会长于最短的那个字符串,所以用minlen记录n个字符串的最短长度,并把那个最短的字符串存在c中
              {
                     scanf("%s",str[i]);
                     len=strlen(str[i]);
                     if(minlen>len)
                     {
                            minlen=len;
                            strcpy(c,str[i]);
                     }
              }
              for(i=minlen;i>0;i--)//i为子串的长度
              {
                     for(j=0;j<=minlen-i;j++)//当子串的长度为i时,存在minlen-i种可能的字串。例如ABCD,当子串长度为4时,子串只有一种,即ABCD;当子串的长度为3时,有ABC,BCD两种;当子串长度为2时,有AB,BC,CD三种子串
                     {
                            strncpy(a,&c[j],i);//strncpy(*str1,*str2,n)就是从str2中copy i个字符赋给str1;
                            a[i]='\0';
                            strcpy(b,a);
                            b[i]='\0';
                            strrev(b);
                            for(k=0;k<n;k++)
                            {
                                   if(strstr(str[k],a)==NULL&&strstr(str[k],b)==NULL)//strstr(s1,s2)如果s2,是s1的子串,返回s1第一次出现的地址,否则返回NULL;
                                          break;
                            }
                            if(k==n)
                            {
                                   flag=i;
                                   break;
                            }
                     }
                     if(flag)
                            break;
              }
              printf("%d\n",flag);
       }
       return 0;
}
 


Substrings poj1226 (后缀数组)

给n个串,找到一个字符串S。 使得,每个串里要么有S,要么有S的反转。首先构造字符串,把每个字符串和其反转连接在一起(这个中间也要用字符分割!!很重要!!),然后用一个字符(不会出现在串里的)分割。...
  • getupdown
  • getupdown
  • 2016年08月19日 19:22
  • 125

POJ 1068 Parencodings(暴力枚举)

题目大意:对于一个由左括号'('和右括号')'组成的字符串S,给出其P序列,输出对应的W序列(P序列中P[i]表示在第i个右括号有P[i]个左括号,W序列中W[i]表示由第i个右括号组成的括号对内有W...
  • Noooooorth
  • Noooooorth
  • 2015年07月22日 00:19
  • 1409

poj1226

题目链接:http://poj.org/problem?id=1226 给一些字符串,求公共的最长子串的长度。 用到了KMP算法 我的解法很一般,先对字符串排个序,最短的在最前面。 ...
  • onesafe
  • onesafe
  • 2014年04月04日 18:50
  • 340

后缀数组poj1226

题意:求最长的公共子串,使她后者是他的翻转串在每个
  • u010660276
  • u010660276
  • 2014年07月30日 16:30
  • 347

POJ 1226(最长公共子串含逆序)

Language: Default Substrings Time Limit: 1000MS   Memory Limit: 10000K Total Sub...
  • nike0good
  • nike0good
  • 2012年11月15日 15:21
  • 886

HDU1238 POJ1226 Substrings 最长公共子串(子反串也算)

题目大意:给你n个长度小于100的字符串,让你找出他们之间的最长公共子串。其中,如果一个字符串含有另外一个子串的反串,那么这个子串也算做是他们之间的公共子串。 分析:我们可以先找出给出的字符串中长...
  • AC_Gibson
  • AC_Gibson
  • 2015年04月21日 16:20
  • 538

POJ3450 Corporate Identity 最长公共子串

题目大意:给你n个字符串,让你找出他们的最长公共子串,如果存在多条,输出字典序最小的一个,若不存在,输出“IDENTITY LOST”。 分析:感觉就是 POJ1226,POJ3080 的综...
  • AC_Gibson
  • AC_Gibson
  • 2015年04月24日 15:05
  • 460

POJ1226

题目Substrings Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14254 Accepted...
  • Fate_Zero_Saber
  • Fate_Zero_Saber
  • 2017年07月11日 15:43
  • 170

日志20140704~1226

2014/07/04 1、阅读器统计数据,25号和26号这两天数据生成不完整的分析解决(两个相同渠道号yiyonghui)。 2、解锁,英文的支持,多加了3个字段(name2,author2,de...
  • gaojinshan
  • gaojinshan
  • 2015年01月07日 10:39
  • 724

poj1226(哈希)

点击打开题目链接 大意:多组数据,每组n个字符串,寻找最长的X,使得对n个字符串中的任意一个,X或者X反转过来的字符串 是其子串。(输出X的长度即可) 思路:这道好像KMP或者后缀数组都...
  • lixiaomu2
  • lixiaomu2
  • 2017年05月22日 23:23
  • 106
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj1226
举报原因:
原因补充:

(最多只允许输入30个字)