专栏文章

题解:P13549 热辣滚烫

P13549题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minq66ai
此快照首次捕获于
2025/12/02 06:32
3 个月前
此快照最后确认于
2025/12/02 06:32
3 个月前
查看原文

题意

给出两个字符串 s1s_1s2s_2,问能否在 s1s_1 中间插入任意字符串,得到 s2s_2

思路

插入的位置把 s1s_1 分成了前后两个部分,很明显,这两个部分分别是 s2s_2 的前缀和后缀。
所以题目可以转化成:求 s1s_1s2s_2 的公共前后缀是否覆盖了整个 s1s_1
分别从前往后和从后往前遍历两个字符串,计算出公共前缀的长度和公共后缀的长度,如果两个长度相加大于等于 s1s_1 的长度,就说明公共前后缀覆盖了整个 s1s_1,输出 Yes,否则输出 No

代码

CPP
#include<bits/stdc++.h>
using namespace std;
int f(){
	int n,m;
	cin>>n>>m;
	string a,b;
	cin>>a>>b;
	int sum1,sum2=0;
	for(sum1=0;sum1<n;sum1++){
		if(a[sum1]!=b[sum1]){
			break;
		}
	}
	for(int a1=n-1,a2=m-1;a1>=0&&a2>=0;a1--,a2--){
		if(a[a1]==b[a2]){
			sum2++;
		}
		else{
			break;
		}
	}
	if(sum1+sum2>=n){
		cout<<"Yes\n";
	}
	else{
		cout<<"No\n";
	}
	return 0;
}
int main(){
	int T;
	cin>>T;
	while(T--){
		f();
	}
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...