t2712:字符串移位包含问题

时间:2023-03-09 04:15:35
t2712:字符串移位包含问题

t2712:字符串移位包含问题
   总时间限制:1000ms  内存限制:65536kB
描述
    给定两个字符串s1和s2,要求判定其中一个字符串
    是否是另一字符串通过循环移位后的子字符串。例如
    CDAA是由AABCD两次移位后BCDAA的子串,而ABCD
    与ACBD不能通过移位来得到其中一个字符串是另一个字
    符串循环移位的子串。
输入
    第一行有一个整数n,表示这组测试数据共有n行。
    其后n行,每行由两个字符串组成。
输出
    如果一个字符串是另一字符串通过循环移位的子串,
    则返回true,否则返回false。
样例输入
    2
    AABCD CDAA
    ABCD ACBD
样例输出
    true
    false

分析:据网上流传资料,假如两个串a和b满足:b是a循环移位后的一个子串,则b是串a&a的子串。当然,在这之前要满足LenA>=LenB,否则不科学不合理。

 #include <stdio.h>
#include<string.h>
int main(int argc, char *argv[]) {
int n,i;
char a[],b[],t[];
char *p; scanf("%d",&n);
//printf("%d\n",n);
getchar();
for(i=;i<n;i++)
{
scanf("%s%s",a,b);
getchar();
//printf("%s %s\n",a,b);
if(strlen(a)>=strlen(b))
{
t[]='\0';
strcpy(t,a);
strcat(t,a);
p=NULL;
p=strstr(t,b);
if(p!=NULL) printf("true\n");
else printf("false\n");
}
else
{
t[]='\0';
strcpy(t,b);
strcat(t,b);
p=NULL;
p=strstr(t,a);
if(p!=NULL) printf("true\n");
else printf("false\n");
}/**/
}
return ;
}