• 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;
    }
    让未来到来 让过去过去
  • 相关阅读:
    ArcEngine 一些实现代码(转载)
    关于GIS支持的地理数据源的命名空间
    SpringBoot-Web配置
    RedisGeo
    JedisCluster
    Java并发编程:Lock
    java并发编程:线程变量-ThreadLocal类
    java并发编程:线程池-Executors
    解决Mybatis配置ORM映射 时分秒都为0
    Kafka的存储机制以及可靠性
  • 原文地址:https://www.cnblogs.com/Tinamei/p/4234749.html
Copyright © 2020-2023  润新知