zoukankan      html  css  js  c++  java
  • HDU-5414 CRB and String

    http://acm.hdu.edu.cn/showproblem.php?pid=5414

    题意:给定字符串s和t,可以在s里面选一个字符c,然后任选一个字符d(d!=c)将d插入到c的后面,问能不能将s变为t。

    分析:只要前面t串连续的字符==s字符串,而且保证s是t的子串。本来想不通s:aabaa,t:aabaaaa,后面四个a怎么插,后来才想明白,后面的a都可以插在b后面,就可以了。

    CRB and String

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 676 Accepted Submission(s): 256


    Problem Description
    CRB has two strings s and t .
    In each step, CRB can select arbitrary character c of s and insert any character d (d c ) just after it.
    CRB wants to convert s to t . But is it possible?
     
    Input
    There are multiple test cases. The first line of input contains an integer T , indicating the number of test cases. For each test case there are two strings s and t , one per line.
    1 ≤ T105
    1 ≤ |s||t|105
    All strings consist only of lowercase English letters.
    The size of each input file will be less than 5MB.
     
    Output
    For each test case, output "Yes" if CRB can convert s to t, otherwise output "No".
     
    Sample Input
    4
    a
    b
    cat
    cats
    do
    do
    apple
    aapple
     
    Sample Output
    No
    Yes
    Yes
    No
     
    Author
    KUT(DPRK)
     
    Source
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    char s[100005],t[100005];
    int main()
    {
        int r;
        scanf("%d",&r);
         getchar();
        while(r--)
        {
          int i,j;
           scanf("%s",s);
            scanf("%s",t);
            int len1=strlen(s);
            int len2=strlen(t);
              int flag=1;
            for(i=1;i<len2;i++)
              if(t[i]!=t[0])
                   break;//找到t串的第一个不连续的位置
             for(j=0;j<i;j++)//看s的前i个子串是否连续
                 if(s[j]!=t[j])
                    {
                        flag=0;
                        break;
                    }
                    j=i;
             for(;j<len1;j++)
             {
               for(;i<len2;i++)
                {//找到下一个和s相等的地方
                if(t[i]==s[j])
                    break;
                }
              if(i==len2)
                  {
                      flag=0;
                      break ;//如果t找完了还没跳出证明s不是t的子串
                  }
              i++;
            }
            if(s[0]!=t[0])
                    flag=0;
            if(flag)
               printf("Yes
    ");
             else
             printf("No
    ");
             }
        return 0;
    }
  • 相关阅读:
    细说 ASP.NET Cache 及其高级用法【转】
    类变量和实例变量的区别是什么?
    【转】细说Cookie
    【转】细说 Form (表单)
    PHP API中,MYSQL与MYSQLI的持久连接区别
    Extending_and_embedding_php翻译
    linux常见面试题及答案
    手机辐射查询
    php5.3 PHP5.4 PHP5.5 新特性/使用PHP5.5要注意的
    sqoop安装遇到的问题
  • 原文地址:https://www.cnblogs.com/cancangood/p/4749815.html
Copyright © 2011-2022 走看看