思维字符串匹配双指针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串,所以说我们总是先匹配最后的字符也可以得到下相应的结果。

字符串匹配问题:

因为删除都是删除前面的,后面的一定是结果,所以可以由果到因进行求解。

我们从字符串右边到左边进行匹配,定义两个指针分别指向两个字符串的结尾。

匹配成功 匹配失败 两个指针同时向前移一位 指向s字符串的指针移两位 匹配

最后如果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的主要内容,如果未能解决你的问题,请参考以下文章

双指针D. Cyclic Rotation

Codeforces Round #626 D. Present 异或按位确定 +二分or双指针

Codeforces1560 D. Make a Power of Two(思维+暴力)

(栈,双指针) leetcode. 844 Backspace String Compare

D. MEX Tree(容斥+双指针)

CF #727(div2)D. PriceFixed, 贪心,双指针