OpenJudge百炼-2744-子串-C语言-字符串处理

来源:互联网 发布:短信阿里云授权服务 编辑:程序博客网 时间:2024/05/07 22:41

描述:
现在有一些由英文字符组成的大小写敏感的字符串,你的任务是找到一个最长的字符串x,使得对于已经给出的字符串中的任意一个y,x或者是y的子串,或者x中的字符反序之后得到的新字符串是y的子串。
输入:
输入的第一行是一个整数t (1 <= t <= 10),t表示测试数据的数目。对于每一组测试数据,第一行是一个整数n (1 <= n <= 100),表示已经给出n个字符串。接下来n行,每行给出一个长度在1和100之间的字符串。
输出:
对于每一组测试数据,输出一行,给出题目中要求的字符串x的长度。
样例输入:
2
3
ABCD
BCDFF
BRCD
2
rose
orchid
样例输出:
2
2


/*******************************************************文件名:百炼-2744**Copyright (c) 201-2025 OrdinaryCrazy**创建人:OrdinaryCrazy**日期:20170810**描述:百炼2744参考答案**版本:1.0******************************************************/#include <stdio.h>#include <string.h>/*****************************************************作为整个字符串组的公共子串,最低要求它应该是最短的字符串的子串则对最短字符串的子串由长到短依次检验,直到找到符合要求的长度为止******************************************************/char str[100][101];int n,min,minl;void strrevf(char* a){    char* l = a;    char* r = a;    while(*r) r++;    r --;    char tmp;    while(r > l)    {        tmp = *r;        *r = *l;        *l = tmp;        r--;        l++;    }}/********************************************************函数名:solve**输出:字符串组最长子串长度**功能:计算字符串组最长子串长度**作者:OrdinaryCrazy**日期:20170810**版本:1.0*******************************************************/int solve(){    int res = minl,i,j,found;    char substr[101],revsubstr[101];    while(res)    {        for(i = 0;i <= minl - res;i++)//对长为res的子串依次检验        {            strncpy(substr,&str[min][i],res);            strcpy(revsubstr,substr);            substr[res] = revsubstr[res] = '\0';            strrevf(revsubstr);            found = 1;            for(j = 0;j < n;j++)                if(strstr(str[j],substr)==NULL && strstr(str[j],revsubstr)==NULL)                {                    found = 0;                    break;                }            if(found)                return res;        }        res--;    }    return 0;}int main(){    int t,i;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        min = 0;        minl = 1000;        for(i = 0;i < n;i++)        {            scanf("%s",str[i]);            if(strlen(str[i]) < minl)            {                min = i;                minl = strlen(str[i]);            }        }        printf("%d\n",solve());    }    return 0;}

阅读全文
0 0
原创粉丝点击