Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 6563 | Accepted: 3827 |
Description
Given a string s of length n, a subsequence of it, is defined as another strings' = su1su2...sum where 1 ≤u1 < u2 < ... < um ≤ n and si is the ith character of s. Your task is to write a program that, given two stringss1 and s2, checks whether either s2 or its reverse is a subsequence ofs1 or not.
Input
The first line of input contains an integer T, which is the number of test cases. Each of the nextT lines contains two non-empty strings s1 and s2 (with length at most 100) consisted of only alpha-numeric characters and separated from each other by a single space.
Output
For each test case, your program must output "YES", in a single line, if eithers2 or its reverse is a subsequence of s1. Otherwise your program should write "NO".
Sample Input
5 arash aah arash hsr kick kkc A a a12340b b31
Sample Output
YES YES NO NO YES
#include<stdio.h>
#include<string.h>
void Strrev(char s[102])//poj不识别strrev
{
char s1[102];
int i,k;
strcpy(s1,s);
k=0;
for(i=strlen(s)-1;i>=0;i--)
s[k++]=s1[i];
s[k]=0;
}
int main()
{
int t,i,j,a,b;
char ch1[1009],ch2[1009];
scanf("%d",&t);
getchar();
while(t--)
{
scanf("%s %s",ch1,ch2);
a=strlen(ch2);
b=strlen(ch1);
i=0;j=0;
while(i<b&&j<a)
{
if(ch1[i]==ch2[j])
{
i++;j++;
}
else
i++;
}
if(j==a){printf("YES\n");continue;}
else
{
Strrev(ch2);
i=0;j=0;
while(i<b&&j<a)
{
if(ch1[i]==ch2[j])
{
i++;j++;
}
else
i++;
}
if(j==a)printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}