D1. Remove the Substring (从easy到hard)
对于easy版本对于easy版本对于easy版本
直接枚举删掉的区间[l,r]判断是否存在t子串直接枚举删掉的区间[l,r]判断是否存在t子串直接枚举删掉的区间[l,r]判断是否存在t子串
这个很简单很暴力这个很简单很暴力这个很简单很暴力
#include <bits/stdc++.h>
using namespace std;
const int maxn=209;
char s[maxn],t[maxn];
int ans;
bool isok(int l,int r)
{int x=1;for(int i=1;i<=strlen(s+1);i++){if(i>=l&&i<=r) continue;if(t[x]==s[i]) x++;if(x==strlen(t+1)+1) return true;}return false;
}
int main()
{cin>>(s+1)>>(t+1);for(int i=1;i<=strlen(s+1);i++)for(int j=i;j<=strlen(s+1);j++)if(isok(i,j)) ans=max(ans,j-i+1);cout<<ans;
}
hard版本\color{red}hard版本hard版本
我们知道,区间最大有两种情况我们知道,区间最大有两种情况我们知道,区间最大有两种情况
一、首字符出现最晚,此时删掉[1,首字符)一、首字符出现最晚,此时删掉[1,首字符)一、首字符出现最晚,此时删掉[1,首字符)
末字符出现最早,此时删掉(末字符,n](n是s串长度)末字符出现最早,此时删掉(末字符,n](n是s串长度)末字符出现最早,此时删掉(末字符,n](n是s串长度)
二、当最快匹配到i位置时,下一个匹配的字母使其最远为j,此时可删掉(i,j)二、当最快匹配到i位置时,下一个匹配的字母使其最远为j,此时可删掉(i,j)二、当最快匹配到i位置时,下一个匹配的字母使其最远为j,此时可删掉(i,j)
这些都不难想,包括最快匹配到i字符的位置\color{Red}这些都不难想,包括最快匹配到i字符的位置这些都不难想,包括最快匹配到i字符的位置
最快,所以我们一个字符一个字符匹配,相同就往后匹配最快,所以我们一个字符一个字符匹配,相同就往后匹配最快,所以我们一个字符一个字符匹配,相同就往后匹配
那如何知道下一个字母最晚能在哪里匹配呢?那如何知道下一个字母最晚能在哪里匹配呢?那如何知道下一个字母最晚能在哪里匹配呢?
我们只需要倒着求一遍倒着的t串最快匹配位置即可\color{orange}我们只需要倒着求一遍倒着的t串最快匹配位置即可我们只需要倒着求一遍倒着的t串最快匹配位置即可
#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
char s[maxn],t[maxn];
int pre[maxn],last[maxn],top1,top2,ls,lt,ans;
void isok1()
{int x=1;for(int i=1;i<=ls;i++){if(s[i]==t[x]) pre[x++]=i;if(x>lt) return;}
}
void isok2()
{int x=lt;for(int i=ls;i>=1;i--){if(s[i]==t[x]) last[x--]=i;if(x<1) return;}
}
int main()
{cin>>(s+1)>>(t+1);ls=strlen(s+1),lt=strlen(t+1);isok1();isok2();ans=max(last[1]-1,ls-pre[lt]);for(int i=1;i<lt;i++)ans=max(ans,last[i+1]-pre[i]-1);cout<<ans;
}
D1. Remove the Substring (从easy到hard)相关推荐
- CodeForces Round #730 D1. RPD and Rap Sheet (Easy Version)题解
Codeforces Round #730 (Div. 2) 题意: t组数据,每组给一个n和k,(easy version里面k=2) 每一次系统会输入一个初始的密码(初始密码是一个在[0,n−1] ...
- D1. RPD and Rap Sheet (Easy Version) (交互题+构造)
题意: 交互题,有一个初始密码xxx,只有nnn次猜测机会,假如猜了yyy,x!=yx!=yx!=y,那么密码就会变成x⨁yx\bigoplus yx⨁y. 题解: 设第iii次猜测的数为pip_ip ...
- Codeforces Round #730 (Div. 2) D1. RPD and Rap Sheet (Easy Version)
传送门 思路: 假设0到n-1之间的数为密码,则可以想到一个可行的解法: 第一次输出0,之后的每一次都输出(i−1)⊕(i−2)(i-1)⊕(i-2)(i−1)⊕(i−2). 假设答案为x,那么第一次 ...
- CodeForces - 1543D1 RPD and Rap Sheet (Easy Version)(异或+交互)
题目链接:点击查看 题目大意:交互题猜密码,设原密码为 xxx,猜的密码为 yyy,如果没猜到,密码会自适应变成 zzz,满足 x⊕z=yx \oplus z=yx⊕z=y ,最多猜 nnn 次 题目 ...
- #730 (Div. 2) A 思维 C dfs D1 交互思维
A. Exciting Bets 根据样例猜的答案 首先发现 gcd这项,就是两个数差的绝对值 tmp 把两个数都对tmp取模,那么min(x,x-tmp)是a的最小操作数 min(y,y-tmp)就 ...
- LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本
1. Array (1) 27. Remove Element(Easy) 给定数组nums和值val,在适当位置删除该值的所有实例并返回新长度. 思路: 不需要使用排序,如果等于该值,则将n-1的值 ...
- Core Java Volume I — 3.6. Strings
3.6. Strings Conceptually, Java strings are sequences of Unicode characters(Java的字符串是一个Unicode序列). F ...
- LeetCode 力扣算法题解汇总,All in One
作者: 负雪明烛 id: fuxuemingzhu 个人博客: https://fuxuemingzhu.cn 关键词:LeetCode,力扣,算法,题解,汇总,解析 把自己刷过的所有题目做一个整理, ...
- Leetcode算法题-解法转载
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuxuemingzhu/article/details/85112591 作者: 负雪明烛 i ...
最新文章
- 胡言乱语集锦-大数据,手机,传统,养生
- jstl fn:replace替换换行符
- UA PHYS515A 电磁理论V 电磁波与辐射3 偏振
- ASP.NET Hashtable输出JSON格式数据 - 贵源网络 - 博客园
- 人工机器:NDC-谷歌机器翻译破世界纪录,仅用Attention模型,无需CNN和RNN
- 写给前端新手看的一些模块化知识
- 由马化腾谈“微博修改功能”,看什么是优秀的产品经理
- C#设计模式之12-代理模式
- MESI--CPU缓存一致性协议
- 一个简单的微服务项目带你上手spring cloud 全家桶
- 增量式速度pid调节策略_增量式PID是什么?不知道你就落伍了
- 大学数学实验习题--统计推断 (附答案)
- HTTP Live Streaming(HLS)详解
- 《数据库系统概论》复习
- 傅里叶级数与傅里叶变换_Part4_傅里叶级数的复数形式
- b2b2c商城php源码,多用户B2B2C商城系统 thinkphp5.0
- Java对接网易云信IM 即时通讯
- Flutter报错:Bad state: Stream has already been listened to.
- [日常训练] 联络网
- linux上离线安装PostgreSQL和插件PostGIS