uva 10340 子序列

//要达到题目的条件,需要做到
//子串元素的顺序与父串一一对应!
#include
#include
int shunxu(char*p, char*q,int *book, int m, int n)
{
 int f = 1;
 int k = 0;
 int min = 0;
 for (int i = 0;i < n;i++)
 {
  for (int j = min;j < m;j++)
  {
   if (q[i] == p[j])
   {
    book[i] = j;//book元素的每一位代表子串在父串中是否出现
    min = j + 1;/*先遍历子串再遍历父串,若子串中的元素比如q[0]在父串中出现,用book[0]标记,然后min=j+1,保证下次的b                                                                                      [1]如果出现一定出现在j也就是b[0]对应父串中的位置的下一位*/
 break;
   }
  }
 }
 for (int a = 0;a < n;a++)
  if (book[a] == -1)
   return 0;
 return 1;
}
char  a[1000000];
char b[1000000];
int book[1000000];
int main(void)
{
  while (scanf_s("%s%s", b, 1000000, a, 1000000) != EOF)
  {
   int lena = strlen(a);
   int lenb = strlen(b);
   memset(book, -1, sizeof(book));
   if (shunxu(a, b,book ,lena, lenb))
    printf("Yes\n");
   else
     printf("No\n");
 
 
  }
  return 0;
}

你可能感兴趣的:(the,first,step)