问题: 有字符串a、b, 求字符串a是否包含字符串b,如果包含, 返回起始位置。

解法1. 暴力破解。

从a的第一个字符起,移动n(n为b的长度), 判断a和b相应位置的字符是否匹配, 如不匹配则从a的第2位起,重复前述过程, 直至完全匹配上,或移动至a结尾(ps: 不用移动至a结尾, 移动到m-n位即可, m是a的长度)。

 1 public static int contains(String a, String b) {
 2         if(a.equals(null) || b.equals(null)) {
 3             return -1;
 4         }
 5         if(a.length() < b.length()) {
 6             return -1;
 7         }
 8         int i = 0, j =0;
 9         while(i<=a.length() - b.length() && j<b.length()) {
10             if(a.charAt(i+j) == b.charAt(j)) {
11                 j++;
12             }else {
13                 j = 0;
14                 i++;
15             }
16         }
17         if(j==b.length()) {
18             return i;
19         }
20         return -1;
21     }

View Code

该方法的时间复杂度为O(n2),等同于:

 1 public static int contains(String a, String b) {
 2         if(a.equals(null) || b.equals(null)) {
 3             return -1;
 4         }
 5         if(a.length() < b.length()) {
 6             return -1;
 7         }
 8
 9         int i = 0;
10         while(i<=a.length() - b.length()) {
11             int j = 0;
12             while(j<b.length()) {
13                 if(a.charAt(i+j) == b.charAt(j)) {
14                     j++;
15                 }else {
16                     break;
17                 }
18             }
19
20             if(j==b.length()) {
21                 return i;
22             }
23             i++;
24         }
25         return -1;
26     }

View Code

解法2. kmp算法

转载于:https://www.cnblogs.com/lowseasonwind/p/9250209.html

字符串匹配-kmp算法相关推荐

  1. kmp算法详解php,php中字符串匹配KMP算法实现例子

    KMP算法是一个比较高级的算法了,加了改进了,下面我们来在php中实现KMP算法,希望例子对各位同学会带来帮助哦. kmp算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J. ...

  2. C++实现字符串匹配KMP算法

    文章目录 1. 概述 2. 代码实现 3. 代码测试 1. 概述 Kmp算法的介绍及思想参阅下面两篇文章: 字符串匹配KMP算法 算法)通俗易懂的字符串匹配KMP算法及求next值算法 2. 代码实现 ...

  3. 字符串匹配 KMP算法

    问题描述:字符串匹配即查找待匹配字符串(模式串)p在主串s中的位置.一般处理这种问题往往采用简单粗暴的方法--暴力匹配法.所谓暴力匹配法,就是对主串s的每一个字符与要匹配的字符串p的每个字符进行逐一匹 ...

  4. 字符串匹配——KMP算法

    字符串匹配--KMP算法 ​ 字符串匹配是计算机编程中最常使用到的基础算法之一.字符串匹配相关的算法很多,Knuth-Morris-Pratt(KMP)算法是最常用的之一.最近在学习KMP算法,学习了 ...

  5. 字符串匹配KMP算法

    字符串匹配KMP KMP过程其实就是去找下一个更好的状态的过程,省略去了中间穷举的无用过程,直接跳到下一个更好的状态,通过模式串本身的信息,站在模式串的角度来考虑问题 取长的一对 若想让模式串直接从S ...

  6. C语言实现字符串匹配KMP算法

    相信很多人(包括自己)初识KMP算法的时候始终是丈二和尚摸不着头脑,要么完全不知所云,要么看不懂书上的解释,要么自己觉得好像心里了解KMP算法的意思,却说不出个究竟,所谓知其然不知其所以然是也. 字符 ...

  7. 【数据结构与算法】字符串匹配 KMP 算法

    单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 KMP 算法 KMP 算法是根据三位作者(D.E.Knuth,J.H.Morris ...

  8. 字符串匹配KMP算法的讲解C++

    转自http://blog.csdn.net/starstar1992/article/details/54913261 也可以参考http://blog.csdn.net/liu940204/art ...

  9. 字符串匹配KMP算法的理解(详细)

    1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱.所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文. ...

  10. 字符串匹配——KMP算法【C语言】

    KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用匹配失败后 ...

最新文章

  1. python 连接sqlite及操作
  2. 高度平衡二叉树的构建_平衡二叉树(AVL)树
  3. 遗传算法对于神经网络的优生优育
  4. c语言英文字符转数字,C语言常用数字和字符串转换函数(国外英文资料).doc
  5. Linux grep命令——文本搜索工具
  6. [云炬创业基础笔记]第九章企业的法律形态测试4
  7. Mike and distribution(思维)
  8. 置信区间估计 预测区间估计_估计,预测和预测
  9. 信息技术课与计算机课有关系吗,信息技术教学与计算机教学的区别与联系
  10. 2015第16周四自控力
  11. check_mysql 脚本_如何使用myisamchk和mysqlcheck工具快速修复损坏的MySQL数据库文件
  12. 百叶窗叶片锋利,不安全
  13. jsjavaScriptDate的时间格式转换,直接粘贴就可以使用
  14. NMEA的GPGGA数据包解析 字符转数字
  15. Android苹方圆三合一字体,橘色主题-圆形图标 内置苹方+googlesans字体 透明文件夹...
  16. 产品体验报告:Keep
  17. 光致变色染料的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 【MW】Drop Materialized View Hangs with 'Enq: JI - Contention'
  19. Android之单元测试
  20. 【K哥爬虫普法】蓄意突破反爬虫技术,爬取牌照信息

热门文章

  1. 菜鸟数据中台技术演进之路
  2. 十面阿里,屌丝程序员的逆袭之路
  3. 虐哭无数人的烧脑刑侦科推理题,程序员一秒解
  4. 2017年最具价值的十大开源项目:tensorflow 第一
  5. 中国 X86 服务器市场 10 年来首次负增长
  6. Google 中国招聘啦
  7. 推荐几个非常有用的工具
  8. 计算机知识考试试题及答案,职称计算机考试基础知识章节试题及答案一
  9. vc浏览器_【36氪基金X一刻】零基础VC/PE行研标准班7月10日线上开课
  10. 服务端Latex解析成图片或者HTML或者SVG方案