• 题意:给你一个模式串\(t\),现在要在主串\(s\)中删除多个子串,使得得到的\(s\)的子序列依然包含\(t\),问能删除的最长子串长度.

  • 题解:首先,我们不难想到,我们可以选择\(s\)头部到最右边的子序列的头部和最左边的子序列的尾部到\(s\)的尾部这两个子串,除去这两个子串,我们要找的最大子串一定在子序列的头部到尾部中,即子序列中两个相邻字符位置的间隔,那么很显然,我们想让相邻的字符之间相隔最大,所以问题也就转化成了:求模式串的相邻字符在主串中的最大间隔长度,最优的情况一定是最左的子序列到最右的子序列的间隔最大,我们可以正着反着记录模式串中每个字符第一次出现的位置,然后求差更新答案即可.

  • 代码:

    string s;
    string t;
    int pre[N];
    int suf[N]; int main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    cin>>s>>t;
    int lens=(int)s.size();
    int lent=(int)t.size(); int j=0;
    rep(i,0,lens){
    if(s[i]==t[j] && j<lent){
    pre[j++]=i;
    }
    } j=lent-1;
    per(i,lens-1,0){
    if(s[i]==t[j] && j>=0){
    suf[j--]=i;
    }
    } int ans=suf[0]; rep(i,0,lent-2){
    ans=max(ans,suf[i+1]-pre[i]-1);
    } ans=max(ans,lens-1-pre[lent-1]); cout<<ans<<'\n'; return 0;
    }

最新文章

  1. 数据库(Database)
  2. 清北暑假模拟day1 爱
  3. 何为“精通Java”
  4. VS2010中重命名项目
  5. Word文档增加快捷键
  6. 【Android - MD】之Snackbar的使用
  7. java基础(十六)集合(三)
  8. Spring构造器注入、set注入和注解注入
  9. sicily-1029 Rabbit
  10. Python IDLE快捷键
  11. bootstrap---treeview使用方法
  12. iOS中时间与时间戳的相互转化
  13. jsp 运行时报错Cannot find a method to write property [firstName] of type [java.lang.String] in a bean of type [main.Employee]
  14. 4、Kafka命令行操作
  15. wpf(第一章 基础知识)
  16. 线程池构造类 ThreadPoolExecutor 的 5 个参数
  17. ubuntu 该软件包现在的状态极为不妥 error
  18. ECharts动态获取后台传过来的json数据进行多个折线图的显示,折线的数据由后台传过来
  19. 动态创建控件 #Create(...)
  20. Vim 的 Python 编辑器详细配置过程 (Based on Ubuntu 12.04 LTS)

热门文章

  1. Azure Terraform(四)状态文件存储
  2. Docker学习笔记之使用Docker数据卷
  3. python模块/文件/日期时间
  4. 【Linux】rsh进程缓慢问题处理
  5. 关于cin, cin.get(), getchar(),getline()的字符问题
  6. SAP中的F4帮助
  7. 判断最长回文串——暴力、延展、Manacher
  8. three.js cannon.js物理引擎之Heightfield
  9. Linux 三剑客之 grep 使用详解
  10. 前端面试之ES6中的继承!