题解 | #序列模式匹配#

序列模式匹配

https://www.nowcoder.com/practice/48eb5689ad094fe2a55b6d3d84e72efe

先循环遍历确定一个答案范围,然后以这个范围作为基点作滑动窗口,当这个滑动窗口长度比当前答案小,则改为当前答案。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool have(string t,string p,int tstart,int m){
    int n=p.size();
    vector<int> dp;
    for(int i=0;i<n;i++){
        for(int j=tstart;j<m;j++){
            if(p[i]==t[j]){
                dp.push_back(j);
                //j<m-1?tstart=j+1:tstart=m-1;
                tstart=j+1;
                break;
            }
        }
    }
    if(dp.size()==n)    return true;
    else    return false;
}
int main(){
    string t,p;
    while(cin>>t>>p){
        int m=t.size();
        int n=p.size();
        vector<int> dp;
        int ans=0;
        int tstart=0;
        for(int i=0;i<n;i++){
            for(int j=tstart;j<m;j++){
                if(p[i]==t[j]){
                    dp.push_back(j);
                    //j<m-1?tstart=j+1:tstart=m-1;
                    tstart=j+1;
                    break;
                }
            }
        }
        if(dp.size()<n)  cout<<"-1 -1"<<endl;
        else if(dp.size()==n&&dp[0]==0&&dp[n-1]==n-1)  cout<<"0 "<<n-1<<endl;
        else{
            int start=dp[0],end=dp[n-1];
            ans=dp[n-1]-dp[0];
            for(int i=dp[0];i<m;i++){
                for(int j=m-1;j>=max(i,dp[n-1]);j--){
                    if(have(t,p,i,j+1)&&ans>j-i){
                        ans=j-i;
                        start=i;
                        end=j;
                    } 
                        
                }
            }
            cout<<start<<" "<<end<<endl;
        }
        
    }
    return 0;
}
#牛客创作赏金赛##23届找工作求助阵地#
全部评论

相关推荐

05-20 18:38
北京大学 Java
_小趴菜_:北京大学加大加粗就够了
点赞 评论 收藏
分享
饥饿的长颈鹿就要上岸...:简历五项结构 简历只放五项内容,顺序和格式如下: 一、个人信息 只写名字、电话、邮箱 不写性别、年龄、籍贯、政治面貌、微信等额外信息 二、教育经历 格式:学校名称 | 学历 | 专业 | 就读时间 从左到右排列,一行写完 如果专业和岗位对口,写1-2行主修课程;不对口就不写 学历如果不占优势,可以把教育经历放到简历靠后的位置 三、实习/项目经历 如果没有实习经历,全部写项目经历 每条经历格式:项目名 + 岗位名 + 任职时间段 下面写三到五条工作内容 每条工作内容开头必须用四个字概括,加粗,后面跟一条完整描述 所有描述必须用STAR法则来写(情境-任务-行动-结果) 每一条都要有数据支撑和具体成果 四、个人优势 可以写获得的奖项、证书 如果奖项不够,就写你熟练掌握的技能 每条也要有具体数据或成果支撑,不能空泛堆砌 五、整体要求 一页纸,不要超过一页 个人信息只写名字加电话邮箱 贝贝试一下这个方式写简历,我虽然没收到offer,至少收到了好几轮面试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务