字符串最大跨距

简介: 字符串最大跨距

🌵🌵🌵前言

题目

有三个字符串 S,S1,S2,其中,S 长度不超过 300,S1 和 S2 的长度不超过 10。
现在,我们想要检测 S1 和 S2 是否同时在 S 中出现,且 S1 位于 S2 的左边,并在 S 中互不交叉(即,S1 的右边界点在 S2 的左边界点的左侧)。
计算满足上述条件的最大跨距(即,最大间隔距离:最右边的 S2 的起始点与最左边的 S1 的终止点之间的字符数目)。
如果没有满足条件的 S1,S2 存在,则输出 −1。
例如,S= abcd123ab888efghij45ef67kl, S1= ab, S2= ef,其中,S1 在 S 中出现了 2 次,S2 也在 S 中出现了 2 次,最大跨距为:18。
  • 输入格式
    输入共一行,包含三个字符串 S,S1,S2,字符串之间用逗号隔开。

    数据保证三个字符串中不含空格和逗号。

  • 输出格式
    输出一个整数,表示最大跨距。

    如果没有满足条件的 S1 和 S2 存在,则输出 −1。

  • 输入样例:

abcd123ab888efghij45ef67kl,ab,ef

  • 输出样例:

18

代码

#include <iostream>
#include <algorithm>
using namespace std;
string s,s1,s2,s3;
int flag[2];
int num=0;

int main(){
    cin>>s;
    int s_len=s.length();
    for(int i=0;i<s_len;i++){   //记录“,”的位置
        if(s[i]==',') {
            flag[num]=i;
            num++;
        }
    }
    
    s1=s.substr(flag[0]+1,flag[1]-flag[0]-1);//取出s1 
    s2=s.substr(flag[1]+1,s_len-flag[1]);   //取出s2
    s3=s.substr(0,flag[0]);                 //取出s3
    // 也可以:char c;while(cin>>c,c!=',') s+=c;输入
    // cout<<s3<<endl;
    // cout<<s1<<endl; cout<<s2<<endl; cout<<s3<<endl;
    int s1_len=s1.length(),s2_len=s2.length(),s3_len=s3.length();
    int left=0,right=0,left_flag=0,right_flag=0;
    
    for(int i=0;i<s3_len;i++){
        int j=0;
        for(;j<s1_len;j++){
            if(s1[j]!=s3[i+j]) break;
        }
        if(j==s1_len){  //找出最左边的s1,left即为最左边s1右边界的下一个位置
            left_flag=1;
            left=i+s1_len;
            break;
        }
    }
    
    for(int i=s3_len-s2_len;i>=0;i--){
        // cout<<"i "<<i<<endl;
        int j=0;
        for(;j<s2_len;j++){
            if(s2[j]!=s3[i+j]){
                // cout<<"break "<<i+j<<" "<<j<<" "<<s2[j]<<" "<<s3[i+j]<<endl;
                break;
            } 
            
        }
        if(j==s2_len){
            right_flag=1;//找出最右边的s2,left即为最右边的s2的左边界
            right=i;
            break;
        }
    }
    
    if(left_flag==1 && right_flag==1) {//如果两者存在
        if(right-left>=0) cout<<right-left<<endl;//满足不交叉
        else cout<<-1<<endl;
    }
    else cout<<-1<<endl;
    return 0;
}

❤️❤️❤️忙碌的敲代码也不要忘了浪漫鸭!

目录
相关文章
|
人工智能 自然语言处理 API
AI-Compass LLM推理框架+部署生态:整合vLLM、SGLang、LMDeploy等顶级加速框架,涵盖本地到云端全场景部署
AI-Compass LLM推理框架+部署生态:整合vLLM、SGLang、LMDeploy等顶级加速框架,涵盖本地到云端全场景部署
AI-Compass LLM推理框架+部署生态:整合vLLM、SGLang、LMDeploy等顶级加速框架,涵盖本地到云端全场景部署
|
5月前
|
存储 监控 IDE
F3U源码STM32仿三菱PLC底层实现
这个项目实现了基于STM32的仿三菱PLC底层系统,提供了类似三菱FX系列PLC的功能,包括梯形图编程、I/O处理、通信协议等核心功能。
566 1
|
6月前
|
JSON 编解码 Go
Go 新一代网络请求resty!,比net/http好用10倍
resty 是 Go 语言高性能 HTTP 客户端,比 net/http 简洁 10 倍、比 axios 更 Go 风。零依赖、支持链式调用、自动 JSON 编解码、重试/拦截器/Mock/文件上传下载等,Go 1.18+ 可用,一行代码发起请求,大幅提升开发效率与可维护性。(239 字)
768 1
|
8月前
|
前端开发 JavaScript 测试技术
构建可维护的前端架构:从混乱到清晰的演进之路
在现代 Web 开发中,前端工程的复杂度正以前所未有的速度增长。从简单的 jQuery 脚本到如今基于 React、Vue 或 Svelte 的大型应用,开发者不仅要关注功能实现,更要思考如何构建一个可维护、可扩展、可测试的前端架构。本文将探讨如何从“能跑就行”的代码演进为结构清晰、职责分明的前端系统。
|
7月前
|
存储 弹性计算 人工智能
租用阿里云服务器一年要多少钱?2026年最新费用价格全解析
租用阿里云服务器的成本受配置、实例类型、地域等因素影响,不同需求对应不同价格区间。以下结合最新优惠信息,梳理轻量应用服务器、ECS 云服务器及 GPU 服务器的热门配置与一年费用,帮助用户根据业务场景选择合适方案,避免盲目消费。
|
8月前
|
算法 安全 自动驾驶
北斗卫星导航定位技术从核心误差修正方法、不同定位模式到工业场景融合应用详解(二)
北斗系统通过“空间星座+地面控制+用户终端”协同,以伪距测量和空间后方交会实现高精度定位。文章详解六大误差源及三层修正技术,涵盖开放、授权与增强三类定位模式,精度从米级至厘米级。结合UWB、蓝牙等技术,实现工业场景室内外无缝定位,广泛应用于导航、测绘、交通及安全管理。如果您想进一步了解北斗卫星定位技术和案例,欢迎搜索维构lbs智能定位~
|
8月前
|
人工智能 自然语言处理 API
全面认识MCP:大模型连接真实世界的“USB-C接口”
MCP(模型上下文协议)是AI时代的“万能接口”,由Anthropic提出,旨在统一大模型与工具、数据源的连接标准。它简化集成、提升任务处理能力,支持多步骤流程与安全合规,推动AI智能体从对话走向行动,重塑AI应用生态。
|
8月前
|
监控 Java API
移动端性能监控探索:可观测 Android 采集探针架构与实现
阿里云RUM Android SDK提供全链路用户体验监控,通过Native信号捕获、字节码插桩与标准API监听,实现崩溃、ANR、卡顿、网络等性能数据无侵入采集,助力开发者精准定位问题,提升应用稳定性与用户体验。
413 0
|
缓存 负载均衡 监控
解决邮件延迟问题
【10月更文挑战第21天】

热门文章

最新文章