字符串最大跨距

简介: 字符串最大跨距

🌵🌵🌵前言

题目

有三个字符串 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;
}

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

目录
相关文章
|
安全 数据安全/隐私保护 C++
C/C++基础知识——字符串(二)
C/C++基础知识——字符串
455 0
|
存储
PTA:C课程设计(5)
PTA:C课程设计(5)
219 0
|
3天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
2天前
|
云安全 人工智能 自然语言处理
阿里云x硅基流动:AI安全护栏助力构建可信模型生态
阿里云AI安全护栏:大模型的“智能过滤系统”。
|
2天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
|
5天前
|
存储 机器学习/深度学习 人工智能
大模型微调技术:LoRA原理与实践
本文深入解析大语言模型微调中的关键技术——低秩自适应(LoRA)。通过分析全参数微调的计算瓶颈,详细阐述LoRA的数学原理、实现机制和优势特点。文章包含完整的PyTorch实现代码、性能对比实验以及实际应用场景,为开发者提供高效微调大模型的实践指南。
564 2
|
3天前
|
Linux 虚拟化 iOS开发
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
843 4
VMware Workstation Pro 25H2 for Windows & Linux - 领先的免费桌面虚拟化软件
kde
|
5天前
|
人工智能 关系型数据库 PostgreSQL
n8n Docker 部署手册
n8n是一款开源工作流自动化平台,支持低代码与可编程模式,集成400+服务节点,原生支持AI与API连接,可自托管部署,助力团队构建安全高效的自动化流程。
kde
386 3