对于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)相关推荐

  1. 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] ...

  2. D1. RPD and Rap Sheet (Easy Version) (交互题+构造)

    题意: 交互题,有一个初始密码xxx,只有nnn次猜测机会,假如猜了yyy,x!=yx!=yx!=y,那么密码就会变成x⨁yx\bigoplus yx⨁y. 题解: 设第iii次猜测的数为pip_ip ...

  3. 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,那么第一次 ...

  4. CodeForces - 1543D1 RPD and Rap Sheet (Easy Version)(异或+交互)

    题目链接:点击查看 题目大意:交互题猜密码,设原密码为 xxx,猜的密码为 yyy,如果没猜到,密码会自适应变成 zzz,满足 x⊕z=yx \oplus z=yx⊕z=y ,最多猜 nnn 次 题目 ...

  5. #730 (Div. 2) A 思维 C dfs D1 交互思维

    A. Exciting Bets 根据样例猜的答案 首先发现 gcd这项,就是两个数差的绝对值 tmp 把两个数都对tmp取模,那么min(x,x-tmp)是a的最小操作数 min(y,y-tmp)就 ...

  6. LEETCODE-刷题个人笔记 Python(1-400)-TAG标签版本

    1. Array (1) 27. Remove Element(Easy) 给定数组nums和值val,在适当位置删除该值的所有实例并返回新长度. 思路: 不需要使用排序,如果等于该值,则将n-1的值 ...

  7. Core Java Volume I — 3.6. Strings

    3.6. Strings Conceptually, Java strings are sequences of Unicode characters(Java的字符串是一个Unicode序列). F ...

  8. LeetCode 力扣算法题解汇总,All in One

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: https://fuxuemingzhu.cn 关键词:LeetCode,力扣,算法,题解,汇总,解析 把自己刷过的所有题目做一个整理, ...

  9. Leetcode算法题-解法转载

    版权声明:本文为博主原创文章,未经博主允许不得转载.    https://blog.csdn.net/fuxuemingzhu/article/details/85112591 作者: 负雪明烛 i ...

最新文章

  1. 胡言乱语集锦-大数据,手机,传统,养生
  2. jstl fn:replace替换换行符
  3. UA PHYS515A 电磁理论V 电磁波与辐射3 偏振
  4. ASP.NET Hashtable输出JSON格式数据 - 贵源网络 - 博客园
  5. 人工机器:NDC-谷歌机器翻译破世界纪录,仅用Attention模型,无需CNN和RNN
  6. 写给前端新手看的一些模块化知识
  7. 由马化腾谈“微博修改功能”,看什么是优秀的产品经理
  8. C#设计模式之12-代理模式
  9. MESI--CPU缓存一致性协议
  10. 一个简单的微服务项目带你上手spring cloud 全家桶
  11. 增量式速度pid调节策略_增量式PID是什么?不知道你就落伍了
  12. 大学数学实验习题--统计推断 (附答案)
  13. HTTP Live Streaming(HLS)详解
  14. 《数据库系统概论》复习
  15. 傅里叶级数与傅里叶变换_Part4_傅里叶级数的复数形式
  16. b2b2c商城php源码,多用户B2B2C商城系统 thinkphp5.0
  17. Java对接网易云信IM 即时通讯
  18. Flutter报错:Bad state: Stream has already been listened to.
  19. [日常训练] 联络网
  20. linux上离线安装PostgreSQL和插件PostGIS

热门文章

  1. 实战 webpack 4 配置解析一
  2. InfoQ Qclub参与活动感悟
  3. 新西兰天维网:新西兰净移民数量呈下降趋势
  4. 【simulink 三相半波整流电路】
  5. configure(configure的中文意思)
  6. 模仿百度首页页面(附带源码)html+css
  7. Datawhale 7月学习——李弘毅深度学习:深度学习介绍和反向传播机制
  8. Flink处理迟到数据的几种方式
  9. 蓝桥杯.振兴中华(递归)
  10. Java常用的Linux命令