poj3302

Subsequence
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 < ... < umn 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值