• Substrings


     Substrings
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
    Submit Status

    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 file 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>
    #include<stdlib.h>
    
    #define maxn 120
    
    char str[maxn][maxn];
    char source[maxn];
    
    int n;
    void Input()
    {
      int i, len = 1000;
      
      scanf("%d", &n);
      
      source[0] = '';
      
      for(i = 0; i < n; i++)
      {
        scanf("%s", str[i]);
        int lens = strlen(str[i]);
        if(len > lens)
        {
          strcpy(source, str[i]);
          len = lens;
        }
      }
    }
    
    int Find(char substrs[], char revsubstr[])
    {
      for(int i = 0; i < n; i++)
      {
        if(strstr(str[i], substrs) == 0 && strstr(str[i], revsubstr) == 0)
          return 0;
      }
      return 1;
    }
    
    int substring()
    {
      int i, j, len = strlen(source);
      
      for(i = len; i > 0; i--)
        for(j = 0; j + i <= len; j++)
        {
          char substrs[maxn] = {0}, revsubstr[maxn];
          
          strncpy(substrs, source+j, i);
          strcpy(revsubstr, substrs);
          strrev(revsubstr);
          if(Find(substrs, revsubstr))
            return i;
        }
        return 0;
    }
    
    int main()
    {
      int t;
      
      scanf("%d", &t);
      
      while(t--)
      {
        Input();
        
        printf("%d
    ", substring());
      }
      return 0;
    }
    让未来到来 让过去过去
  • 相关阅读:
    android之tabhost讲解
    android Gallery之动画效果
    android Tabhost
    android Listview2 笔记
    android listview高级用法
    Android Gallery实现苹果的coverflow效果
    Listview静态和动态加载显示
    从茂名南到番禺
    Robot中VU录制失败找不到协议的解决办法
    I记 Opening
  • 原文地址:https://www.cnblogs.com/Tinamei/p/4234749.html
Copyright © 2020-2023  润新知