思维字符串匹配双指针D. Backspace
Posted 行码棋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了思维字符串匹配双指针D. Backspace相关的知识,希望对你有一定的参考价值。
题目链接:
https://codeforces.com/problemset/problem/1553/D
题意对我来说挺难理解的
大概题意:
用户在键入字符串s
的过程中,可以按下backspace
键,按下之后当前字符不会被键入而且前面字符串结尾的一个字符会被删除。问字符串s
是否能得到字符串t
按下BackSpace键之后,等价于有两个字符不会被键入,就是相当于删除了s
中的两个字符。
例:
s:abadcb
t:ab
无论是在d
处和最后一个b
处按backspace键;还是在c
处和第二个a
处按backspace键,都能得到相应的t
串,所以说我们总是先匹配最后的字符也可以得到下相应的结果。
字符串匹配问题:
因为删除都是删除前面的,后面的一定是结果,所以可以由果到因进行求解。
我们从字符串右边到左边进行匹配,定义两个指针分别指向两个字符串的结尾。
最后如果t
字符串匹配完全(指针为-1),即为匹配成功。
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int main()
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while(t--)
string a, b;
cin >> a >> b;
int a1 = a.size() - 1, a2 = b.size() - 1;
while(a1 >= 0 && a2 >= 0)
if(a[a1] == b[a2]) a1 --, a2 --;
else a1 -= 2;
if(a2 == -1) cout << "YES\\n";
else cout << "NO\\n";
return 0;
以上是关于思维字符串匹配双指针D. Backspace的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #626 D. Present 异或按位确定 +二分or双指针
Codeforces1560 D. Make a Power of Two(思维+暴力)