[思路题] hdu 5414 CRB and String

题意:

给S,T两个串,可以无限次选择在S串里一个字符后面添加一个字符,但是添加的这个字符不能和选择的字符相同,问S串能不能变成T串。

思路:

经过观察发现,如果S和T长度一样直接判。

如果不一样的话,只要满足

1、S里面的所有字符的顺序都在T串里出现过

2、T前面相同的字符和S的前部分能匹配

这里两个条件,就能构成。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<stack>
using namespace std;
#define ll __int64
char x[123456],y[123456];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        scanf("%s%s",x,y);
        int a,b;
        a=strlen(x);
        b=strlen(y);
        int f=1;
        if(a==b)
        {
            if(strcmp(x,y)==0) f=1;
            else f=0;
        }
        else
        {
            int i,j;
            for(i=1;i<b;i++) if(y[i]!=y[i-1]) break;
            for(j=0;j<i;j++)
            {
                if(x[j]!=y[j]) break;
            }
            if(j!=i) f=0;
            if(f)
            {
                int cnt=a-i;
                for(;i<a;i++)
                {
                    for(;j<b;j++)
                    {
                        if(x[i]==y[j])
                        {
                            cnt--;
                            break;
                        }
                    }
                }
                if(cnt==0) f=1;
                else f=0;
            }
        }
        puts(f==1?"Yes":"No");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值