zoukankan      html  css  js  c++  java
  • HDU 1238 Substing

    思路:

    1.找出n个字符串中最短的字符串Str[N]

    2.从长到短找Str[N]的子子串 subStr[N],以及subStr[N]的反转字符串strrev(subStr[N]);(从长到短是做剪枝处理)

    3.用strstr()函数遍历所有的字符串,看是否含有此子子串subStr[N]或strrev(subStr[N]);只要有一个字符串不包含subStr[N]或strrev(subStr[N])就放弃这个子串,尝试下一个;

    4.找到第一个满足要求的就输出strlen(subStr[N])或者strlen(strrev(subStr[N]));  这里可以用string.h头问件中的一个函数strncpy(str1, str2, n);功能:将字符串2中的最多n个字符复制到字符数组1中;

    这里可以直接返回n;

    #include<iostream>
    #include<algorithm>
    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #include<queue>
    #include<stack>
    #include<math.h>
    #include<vector>
    #include<stdlib.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define N 110
    struct MAZE
    {
        char str[N];
        int len;
    } maze[N];
    
    bool cmp(MAZE x, MAZE y)
    {
        return x.len<y.len;
    }
    
    int solve(int n);
    int Find(char str[], int n);
    int main()
    {
        int t, n;
    
        scanf("%d", &t);
        while(t--)
        {
            memset(maze, 0, sizeof(maze));
            scanf("%d", &n);
            for(int i=0; i<n; i++)
            {
                scanf("%s", maze[i].str);
                maze[i].len=strlen(maze[i].str);
            }
            sort(maze, maze+n,cmp);
            int ans=solve(n);
            printf("%d
    ", ans);
        }
        return 0;
    }
    
    int solve(int n)
    {
        char Str[N];
        for(int i=maze[0].len; i>0; i--)
        {
            strcpy(Str, maze[0].str);
            strcat(Str, maze[0].str);
            for(int j=0; j<maze[0].len; j++)
            {
                char subStr[N];
                memset(subStr, 0, sizeof(subStr));//必须初始化
               strncpy(subStr, Str+j, i);
    
                if(Find(subStr, n))
                    return i;
                if(Find(strrev(subStr), n))
                    return i;
            }
        }
        return 0;
    }
    
    int Find(char s[], int n)
    {
        for(int i=1; i<n; i++)
        {
            if(!(strstr(maze[i].str, s)))
                return 0;
        }
        return 1;
    }
    

      

  • 相关阅读:
    mysql修改密码策略
    YUM方法安装mysql5.7版本
    redis-5.0.5安装(linux centos)
    centos7 安装php7扩展
    Linux df
    Spotlight监控工具使用
    Linux 安装iostat命令
    转载:数据库连接池到底应该设置多大?
    cqlsh 一个错误
    Linux Top命令详解
  • 原文地址:https://www.cnblogs.com/wazqWAZQ1/p/4951074.html
Copyright © 2011-2022 走看看