zoukankan      html  css  js  c++  java
  • 字符串最大跨距

    描述

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

    输入三个串:S1, S2, S3,其间以逗号间隔(注意,S1, S2, S3中均不含逗号和空格);输出S1和S2在S最大跨距;若在S中没有满足条件的S1和S2,则输出-1。样例输入

    abcd123ab888efghij45ef67kl,ab,ef

    样例输出

    18

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    char s[305],s1[15],s2[15];
    int main()
    {
    char c;
    int len=0,len1=0,len2=0;
    while((c=getchar())&&c!=',')
    s[len++]=c;//输入字符数组s
    while((c=getchar())&&c!=',')
    s1[len1++]=c;//输入字符数组s1
    while((c=getchar())&&c!=0)
    s2[len2++]=c;//输入字符数组s2
    int i,j=len2-2,k=0,ans=0;
    for(i=0;i<len;i++)
    {
    if(s[i]==s1[k])
    k++;//当字符数组s1和字符数组s的字符相同时k++,当k==len1时进行if语句
    else
    {
    k=0;//否则k重置为0,继续寻找
    if(s[i]==s1[k]) k++;//找到的话进行if语句
    }
    if(k==len1)//如果找到了
    {
    ans=ans-(i+1);//如果k的长度等于s1的数组长度则把-(i+1)赋值给ans即为s1后第一个字符位置的负值{a s d a d a d s1(z)

    break;//跳出循环
    }
    }
    //cout<<len2<<" "<<s2[j]<<" ";
    for(i=len-1;i>=0;i--)
    {//从字符数组s的最后一个字符开始遍历
    if(s[i]==s2[j])
    { j--;}//从字符数组s2倒着的第一个有效的字符算起如果和字符数组s的字符相等的话则j--
    else
    {
    j=len2-2;//重置为l2-2
    if(s[i]==s2[j]) j--;
    }
    if(j==0)//当找到时
    {
    ans=ans+(i-1);//如果j==0,则把t+(i-1)赋值给t;
    break;
    }
    }
    if(ans>=0) cout<<ans;//如果t大于0则输出t
    else cout<<"-1";//否则输出-1
    return 0;
    }

  • 相关阅读:
    Hbase常用Shell命令
    Hbase的安装与基本操作
    Unity3d 游戏设计(一)井字棋
    Unity3d 二、离散仿真引擎基础
    Unity3D 一、游戏
    String StringBuffer StringBulider
    Java日志记录log4j最简明教程
    使用PinYin4j.jar将汉字转换为拼音
    线性素数筛
    求一个数的约数个数 d(n)
  • 原文地址:https://www.cnblogs.com/741623027zzx/p/6515147.html
Copyright © 2011-2022 走看看