[cf] D. Backspace 双指针+逆向思维 *1500

前言

常见题型罢了!!!
传送门 :

题意

给你一个主串 S S S 和一个目的串 T T T
问是否可以 让 S S S通过操作获得 T T T

操作如下:
" a b c d e f " "abcdef" "abcdef" c c c变成退格键 得 " a b { b a c k s p a c e } d e f " "ab \{backspace\}def" "ab{backspace}def"
" a d e f " "adef" "adef"

思路

因为这个操作 是后面的影响前面的
因此我们可以考虑从后处理,
因为如果我们处理前面的话,后面会有剩余导致不好处理

如果我们从后面处理的话 ,如果遇到不相同的,那么一定是这个和它前面的是必删的,因为这个无法被后面的删除,只能让自己变成退格键

因此我们可以使用双指针 :
i 指 向 s 的 末 尾 j 指 向 t 的 末 尾 i指向s的末尾 j指向t的末尾 isjt

  • 如果 s [ i ] = s [ j ] , i − − , j − − s[i]=s[j] ,i--,j-- s[i]=s[j],i,j
  • 如果 s [ i ] ! = s [ j ] , i − − , i − − s[i]!=s[j],i--,i-- s[i]!=s[j],i,i

CODE

 #include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const int N  = 10;

void cal()
{

}
void solve()
{
    string s,t;
    cin>>s>>t;

    bool flag = false;
    int n = s.size();
    int m = t.size();

    if(n<m)
    {
        cout<<"NO"<<endl;
        return;
    }
    else
    {
        for(int i=n-1,j=m-1;i>=0;i--)
        {
            if(s[i] == t[j])
                j--;
            else
                i --;
            if(j == -1 )
            {
                cout<<"YES"<<endl;
                return;
            }
        }
        cout<<"NO"<<endl;
        return;
    }
}

int main()
{
    ios::sync_with_stdio(false);
    int t;cin>>t;while(t -- )
    solve();
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值