点击查看代码
#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;
}

  1. 不使用 find() 函数的情况下,匹配 s1 和 s2 需要用 l 和 r 枚举 s1 和 s2 起点的可能性,找到 s1 和 s2 的起点在 s 中的位置
  2. 枚举 s1 的起点 l 时,从 0 开始向后枚举,枚举 s2 的起点 r 时,从 s.size() - s2.size() 开始向前枚举
  3. 边界情况1:s 的长度比 s1 的长度或者 s2 的长度小,输出 "-1"
  4. 边界情况2:s1 的终点位置 l ( l += s1.size() - 1 把 l 移到了 s1 的终点位置 ) 大于等于 s2 的起点位置 r

最新文章

  1. Servlet使用注解标注监听器(Listener)
  2. java高新技术-基本数据类型拆装箱及享元设计模式
  3. Asp.net有关访问页面权限的限制和错误页面配置
  4. 深入探索c++对象模型
  5. 利用SQL语句查询数据库中所有表
  6. 一个c++剧情脚本指令系统
  7. quick-x 2.2.5 DragonBones 某些fla导出使用后player卡死
  8. CentOS 6.4源码编译安装httpd并启动测试
  9. 线程池 队列 synchronized
  10. Dede 删除文档同时文章中的图片的方法
  11. POJ-1995 Raising Modulo Numbers---快速幂模板
  12. RabbitMQ (五)主题(Topic)
  13. Classnotfoundexception 与 noClassDelfaultError的区别
  14. 给电脑插上无线网卡,变成路由器----Windows系统承载网络的使用
  15. PLSQL Developer的使用之对象浏览器
  16. Arduino和C51开发DS1302时钟
  17. 2 python第三章文件操作
  18. Android 弹出有确认按键的对话
  19. HBase 使用外部的 zookeeper
  20. 51nod 1196 字符串的数量(DP+数论?)

热门文章

  1. Java如何跳出当前的多重嵌套循环?
  2. 什么是 CSRF 攻击?
  3. List、Set、Map 是否继承自 Collection 接口?
  4. 学习zabbix(一)
  5. Muse UI遇到的坑
  6. Python读文件并写入数组
  7. Hadoop搭建高可用的HA集群
  8. 给一个非矩形数组(Nonrectangular Arrays)
  9. mysql8.0.13本地安装忘记密码解决办法
  10. linux 后台运行