1.题目大意
给你字符串s和t,其中可以把s中的字符替换成Backspace,问输入完s后是否能得到t。
2.输入输出
输入:一行q,有q组数据,接下来每组给两行字符串。
输出:一行,每组的YES或NO
3.解题思路
贪心
通过观察发现,每两个要取的字符中间相隔的必须是偶数个,不然就会多出来字符或者把前面一个删掉。而且同理可得最后一个字符后面也只能保留偶数个字符。所以本题中s的字符能不能取仅跟奇偶位置有关。
但是把最前面的替换成backspace不会有任何影响。所以可以倒过来从尾开始枚举,看是否能为每一个t中的找到合适位置的s。
4.代码&注释
#include<bits/stdc++.h>
using namespace std;
int n,m,T;
string a,b;
int main()
{
scanf("%d",&T);
while(T--)
{
cin>>a>>b;
n=a.size();
m=b.size();
int j=n-1,f=1;
for(int i=m-1;i>=0;i--)//从后面枚举b
{
if(j<0)
break;
while(j>=0)//从后面枚举a
{
if(a[j]==b[i])
{
if(i)j--;//如果b没有枚举完就继续枚举a[j]左边的
break;
}
j-=2;//相隔必须是偶数
}
}
if(j<0)puts("NO");//a枚举完了也找不到符合条件的b[i]
else puts("YES");
}
return 0;
}