[AcWing 778] 字符串最大跨距
2024-09-06 14:46:36
点击查看代码
#include<iostream>
using namespace std;
string s, s1, s2;
int main()
{
char c;
while (cin >> c, c != ',') s += c;
while (cin >> c, c != ',') s1 += c;
cin >> s2;
if (s.size() < s1.size() || s.size() < s2.size()) puts("-1");
else {
int l = 0;
while (l + s1.size() <= s.size()) {
int k = 0;
for ( ; k < s1.size(); k ++) {
if (s[l + k] != s1[k]) break;
}
if (k == s1.size()) break;
l ++;
}
int r = s.size() - s2.size();
while (r >= 0) {
int k = 0;
for ( ; k < s2.size(); k ++) {
if (s[r + k] != s2[k]) break;
}
if (k == s2.size()) break;
r --;
}
l += s1.size() - 1;
if (l >= r) puts("-1");
else printf("%d\n", r - l - 1);
}
return 0;
}
- 不使用 find() 函数的情况下,匹配 s1 和 s2 需要用 l 和 r 枚举 s1 和 s2 起点的可能性,找到 s1 和 s2 的起点在 s 中的位置
- 枚举 s1 的起点 l 时,从 0 开始向后枚举,枚举 s2 的起点 r 时,从 s.size() - s2.size() 开始向前枚举
- 边界情况1:s 的长度比 s1 的长度或者 s2 的长度小,输出 "-1"
- 边界情况2:s1 的终点位置 l ( l += s1.size() - 1 把 l 移到了 s1 的终点位置 ) 大于等于 s2 的起点位置 r
最新文章
- Servlet使用注解标注监听器(Listener)
- java高新技术-基本数据类型拆装箱及享元设计模式
- Asp.net有关访问页面权限的限制和错误页面配置
- 深入探索c++对象模型
- 利用SQL语句查询数据库中所有表
- 一个c++剧情脚本指令系统
- quick-x 2.2.5 DragonBones 某些fla导出使用后player卡死
- CentOS 6.4源码编译安装httpd并启动测试
- 线程池 队列 synchronized
- Dede 删除文档同时文章中的图片的方法
- POJ-1995 Raising Modulo Numbers---快速幂模板
- RabbitMQ (五)主题(Topic)
- Classnotfoundexception 与 noClassDelfaultError的区别
- 给电脑插上无线网卡,变成路由器----Windows系统承载网络的使用
- PLSQL Developer的使用之对象浏览器
- Arduino和C51开发DS1302时钟
- 2 python第三章文件操作
- Android 弹出有确认按键的对话
- HBase 使用外部的 zookeeper
- 51nod 1196 字符串的数量(DP+数论?)