字符串最大跨距

描述

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

时间: 2024-11-07 03:37:59

字符串最大跨距的相关文章

AC日记——字符串最大跨距 openjudge 1.7 26

26:字符串最大跨距 总时间限制:  1000ms 内存限制:  65536kB 描述 有三个字符串S,S1,S2,其中,S长度不超过300,S1和S2的长度不超过10.想检测S1和S2是否同时在S中出现,且S1位于S2的左边,并在S中互不交叉(即,S1的右边界点在S2的左边界点的左侧).计算满足上述条件的最大跨距(即,最大间隔距离:最右边的S2的起始点与最左边的S1的终止点之间的字符数目).如果没有满足条件的S1,S2存在,则输出-1. 例如,S = "abcd123ab888efghij45

noi题库(noi.openjudge.cn) 1.7编程基础之字符串T21——T30

T21:单词替换 描述 输入一个字符串,以回车结束(字符串长度<=100).该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写.现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串. 输入 输入包括3行,第1行是包含多个单词的字符串 s;第2行是待替换的单词a(长度 <= 100);第3行是a将被替换的单词b(长度 <= 100). s, a, b 最前面和最后面都没有空格. 输出 输出只有 1 行,将s中所有单词a替换成b之后的字符串. 样例输入 You w

NOI 1.7编程基础之字符串(35题)

01:统计数字字符个数 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一行字符,统计出其中数字字符的个数. 输入 一行字符串,总长度不超过255. 输出 输出为1行,输出字符串里面数字字符的个数. 样例输入 Peking University is set up at 1898. 样例输出 4 来源 习题(7-1) 医学部 2010 期末试题 樊波 1 #include<cstdio> 2 #include<cstring> 3 ch

整理小朋友在noi.openjudge上的作业(1)

NOI(题库正在建设中,做题纪录有可能会被删除,请注意) 第一章的统计放前面 1 编程基础之输入输出 10 0 0% 最基础有空补刷 2 编程基础之变量定义.赋值及转换 10 0 0% 最基础有空补刷 3 编程基础之算术表达式与顺序执行 20 0 0% 最基础有空补刷 4 编程基础之逻辑表达式与条件分支 21 0 0% 最基础有空补刷 5 编程基础之循环控制 45 10 22% 最基础有空补刷 6 编程基础之一维数组 15 5 33% 最基础有空补刷 7 编程基础之字符串 35 0 0% 有必要

【北大先修课】计算概论(A)题库全代码

题目很水就是全都是坑真是丧心病狂啊 把代码留下造福后来人QωQ 结构体与链表练习 生日相同2.0 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define MAXN 200 using namespace std; struct st { int m,d; string name; bool operator&

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

sql常用格式化函数及字符串函数

一.常用格式化函数 1.日期转字符串 select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') //2017-09-18 22:41:50 YYYY:年(4和更多位) MM:月份号(01-12) DD:一个月里的日(01-31) HH24:一天的小时数(00-23) MI:分钟(00-59) SS:秒(00-59) 2.字符串转日期 select to_date('2017-09-18','YYYY-MM-DD') //2017-09-

PHP 格式化字符串sprintf()

字符串函数 sprintf() 函数把格式化的字符串写入一个变量中 函数说明:sprintf(格式, 要转换的字符串)  参考PHP手册 返回: 格式化后的字符串 举例: 如:保留2位小数, $str = '99.9';echo sprintf('%01.2f', $str);结果为:99.90 echo round($str, 2); 结果为:99.9

js中字符串的替换

定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法 stringObject.replace(regexp/substr,replacement)参数 描述 regexp/substr 必需.规定子字符串或要替换的模式的 RegExp 对象. 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象. replacement 必需.一个字符串值.规定了替换文本或生成替换文本的函数. 返