专栏文章
题解:P13549 热辣滚烫
P13549题解参与者 3已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @minnrqwi
- 此快照首次捕获于
- 2025/12/02 05:25 3 个月前
- 此快照最后确认于
- 2025/12/02 05:25 3 个月前
题解:P13549 热辣滚烫
本题考查对字符串的操作。
题意简述
对于每组数据,题目给定两个字符串 和 ,求能否在 中间插入任意字符串得到 。
分析
我们要插入一个字符串,就要把 分成两个部分。如果满足题目给出的条件,那么这两个部分一定分别是 的前缀和后缀。
因此,可以转化题目:判断 和 的公共前缀和公共后缀是否覆盖了 。
思路
分别从前后遍历两个字符串。第一次从前开始扫,记录公共前缀的长度;第二次从后开始扫,记录公共后缀的长度。根据分析,如果公共前缀的长度和公共后缀的长度之和大于 的长度,即覆盖了 ,那么满足条件。
代码
CPP#include<bits/stdc++.h>
using namespace std;
void solve()
{
int n,m;
cin>>n>>m;
string a,b;
cin>>a>>b;
int i=0,j=0;//两个变量记录公共前后缀的长度
while(a[i]==b[i]) i++;//使用 while 循环,若不满足括号里的条件就退出
int x=n-1,y=m-1;//从后开始扫
while(a[x]==b[y]){
if(x<0||y<0) break;
x--,y--;
j++;
}
if(i+j>=n) cout<<"Yes\n";//覆盖
else cout<<"No\n";//没覆盖
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
cout.tie(0);
int _=1; cin>>_;//多组数据强烈建议使用函数处理
while(_--) solve();
return 0;
}
相关推荐
评论
共 2 条评论,欢迎与作者交流。
正在加载评论...