D2. Remove the Substring (hard version)

D2. Remove the Substring (hard version)

给字符串s,t,保证t为s的子序列,求s删掉最长多长的子串,满足t仍为s的子序列

记录t中每个字母在s中出现的最右的位置,

然后从s开头开始跑

遇到和当前t[j]相同的s[i],j++

即使得t中相邻两个字符距离最大化

注意j跑完t了,最后一位应该为s的长度

复制代码
#include<bits/stdc++.h>
using namespace std;
char s[200004];
char t[200004];
int R[200004];
int main()
{
    scanf("%s",s);
    scanf("%s",t);
    int m=strlen(t);
    int n=strlen(s);
    int j=m-1;
    int i=n-1;
    R[m]=n;
    while(s[i]!=t[j])
    {
        i--;
    }
    R[j--]=i;

    while(j>=0)
    {
        i--;
        while(s[i]!=t[j])i--;
        R[j]=i;
        j--;
    }
    j=0;
    int ans=0;
    //for(int i=0;i<=m;i++)cout<<R[i]<<' ';
    for(int i=0;i<n;i++){
               // if(j==m)break;
        ans=max(ans,R[j]-i);
        //cout<<R[j]<<i<<endl;
        if(j<m&&s[i]==t[j])j++;

    }
    cout<<ans<<'\n';

}
复制代码

 

posted @   liulex  阅读(270)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
点击右上角即可分享
微信分享提示