题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5414

题意:给你两个字符串s和t,你能够在字符串s中随意选一个字符c,在该字符c后插入一个字符d(d!=c)。问经过多次此操作,是否能将字符串s转化成字符串t

思路:初读题理解错题意,以为仅仅能在原串的每一个字符后面加入一个不同于这个字符的一个字母,其实能够反复操作,比方,ap。转换成axxp,能够先在a后面加入一个x。就变成了axp。再次操作。在a后面加入一个x,就能够变成axxp。

换句话说:就是保证若第二个字符串t前k个字符都同样,那么第一个字符串s的前k个字符也必须同样(1),剩下的,即使出现插入的字母和前一个字符同样,我们也能够理解成前一个字符是插在前面那个字符的后一个的字符(2),好吧。说晕了。举个栗子:apple,转换成appple,假设第二个p是插入到p后面的字符,依照题目要求是不能够的,可是同一时候我们能够把第一个p当成插在a后面的字符,这样就符合条件了,这就是之前(2)的解释;再举个栗子:apple。转换成aapple。后一个字符串前两个字符都是a,而第一个字符串仅仅有一个a字符。这样第二个字符串中的第二个字符a就必须是a后面插入的。这样明显就不符合条件,ok,(1)解释完了。。

详细操作步骤,就是先保证若字符串t前k个字符都同样,那么字符串s的前k个字符也必须同样,然后在剩下的字符串中按顺序找到第一个字符串的每一个字母即可

代码:

#include <cstdio>

#include <cstdlib>

#include <cstring>

#include <cmath>

#include <ctime>

#include <iostream>

#include <algorithm>

#include <string>

#include <vector>

#include <deque>

#include <list>

#include <set>

#include <map>

#include <stack>

#include <queue>

#include <cctype>

#include <numeric>

#include <iomanip>

#include <bitset>

#include <sstream>

#include <fstream>

#define debug "output for debug\n"

#define pi (acos(-1.0))

#define eps (1e-8)

#define inf 0x3f3f3f3f

#define ll long long

using namespace std;

const int maxn = 100005;

char str1[maxn],str2[maxn];

int l1,l2;

int check()

{

      int i,j;

        for(i=0;i<l2;i++)

        {

            if(str2[i]!=str2[0])

                break;

        }

        for(j=0;j<i;j++)

        {

            if(str1[j]!=str2[j])

                return 0;

        }

        while(j<l1)

        {

            for(;i<l2;i++)

            {

                if(str1[j]==str2[i])

                    break;

            }

            if(i==l2)

                return 0;

            i++;

            j++;

        }

        return 1;

}

int main()

{

    int t;

    scanf("%d",&t);

    while(t--)

    {

        scanf("%s%s",str1,str2);

         l1=strlen(str1);

         l2=strlen(str2);

        if(l2<l1)

        {

            printf("No\n");

            continue;

        }

        if(check())

            printf("Yes\n");

        else

            printf("No\n");

    }

    return 0;

}

最新文章

  1. 04.SQLServer性能优化之---读写分离&amp;数据同步
  2. The MESI Protocol
  3. HTTP Methods: GET v.s POST
  4. docker学习笔记一:基本安装和设置容器静态ip
  5. 动态规划之LCS(最大公共子序列)
  6. C#常用实例
  7. 说说VS 2015 RC最新开发工具的体验
  8. JAVA CyclicBarrier类详解
  9. Office365开发系列——开发一个全功能的Word Add-In
  10. 获取JSON对象的属性名称
  11. 【原创】Java基础之Session机制
  12. 如何设置记事本( .txt文件)的默认编码为UTF-8?
  13. 六、Django模型基础第一节
  14. 2018ddctf wp
  15. Linux 文件删除原理_009
  16. JavaScript深入系列15篇
  17. Java多线程知识总结(一)
  18. vue实现未登录跳转到登录页面
  19. sonarqube 代码检查
  20. UVALive-3972 March of the Penguins (最大流:节点容量)

热门文章

  1. IDEA创建Maven项目显示一直加载中的问题
  2. MingW和cygwin的区别(转)
  3. dropload上拉加载 下拉刷新
  4. C++ vector基本用法
  5. 【问题】解决python3不支持mysqldb
  6. C# AE 符号选择器
  7. [TypeScript] Asynchronous Iteration using for-await-of
  8. [NOIP2015模拟10.27] 挑竹签 解题报告(拓扑排序)
  9. Oracle中根据表明获取对应表触发器名称
  10. Linux 玩法