Sunday算法简介

  Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配算法。就是为了确定一个字符串是否包含指定的字符串。
  平均时间复杂度:O(n)
  最坏情况下时间复杂度为:O(nm)

算法分析

  其核心思想是:Sunday算法是从前往后匹配,在匹配过程中,模式串(pattern)发现不匹配时,在匹配失败时关注的是主串(main)中参加匹配的最末位字符的下一位字符
  1、如果模式串中没有该字符则直接跳过,即移动位数 = 模式串长度 + 1;
  2、如果模式串中该字符,即移动位数 = 该字符在主串中的位置 - 模式串中该字符最后一次出现的位置。目的是让该字符与模式串中的字符对齐,再从前往后比较每个字符。

贴上JavaScript代码

function sunday(main,pattern,ignoreCase){var charSet = {},              //存放模式串 pattern 的每个字符最后一次出现的位置patternLen = pattern.length,//模式串 pattern 的长度mainLen = main.length;     //主串 main 的场地//是否忽略大小写if(ignoreCase) {main = main.toLowerCase();pattern = pattern.toLowerCase();}//存下 pattern 中每个字符的位置,出现重复字符时:后面出现的字符的位置将会覆盖前面出现的字符的位置for (var i = 0; i < patternLen; i++) {charSet[pattern.charAt(i)] = i;}//主串与模式串逐个比较for (var i = 0; i <= mainLen-patternLen; ) {var j = 0;//比较主串与模式串对应的字符,相同则往后移动一位,注意 i 始终没有变,只是加上了 j 表示移动位置while(j<patternLen && main.charAt(i+j) == pattern.charAt(j)) {j++;}if(j == patternLen) {return i;//在主串 main 中找到了子串 pattern,返回 pattern 在主串中的位置} else {var next = i + patternLen,  //主串中与模式串对应的最后一个字符的下一个字符charPos = charSet[main.charAt(next)];//next所对应的字符在 charSet 的位置,没有返回undefinedif(charPos > -1) {    //模式串中存在next对应的字符i = next - charPos; //让主串与模式串中相同的字符对齐} else {i = next + 1;//模式串中没有 next 对应的字符,主串直接跳过该字符,i 跳到 next 的下一位}}}return -1;//主串main中没有匹配的子串pattern,返回 -1}

Sunday 算法-JavaScript实现相关推荐

  1. 资料分享:送你一本《数据结构与算法JavaScript描述》电子书!

    数据结构 是掌握计算机编程必须具备的技能.通常情况下,我想掌握一门编程语言所用的方法就是利用这门语言把数据结构中线性表.栈.队列.字符串.动态数字.整数集合.树.图.搜索.排序等涉及的算法全部写一遍. ...

  2. 字符串匹配的sunday算法

    sunday算法核心思想:启发式移动搜索步长! SUNDAY 算法描述: 字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).这里介 ...

  3. 数据结构与算法JavaScript (一) 栈

    序 数据结构与算法JavaScript这本书算是讲解得比较浅显的,优点就是用javascript语言把常用的数据结构给描述了下,书中很多例子来源于常见的一些面试题目,算是与时俱进,业余看了下就顺便记录 ...

  4. 字符串匹配--Sunday算法

    前面一篇博客详细介绍了KMP算法,KMP算法的代码不算繁琐,但是理解起来相对比较困难. 后来Daniel M.Sunday在1990年提出了Sunday算法,其思想是从前往后匹配,在匹配失败时关注的不 ...

  5. 浅析 Sunday 算法

    背景 Sunday 算法是 Daniel M.Sunday 于 1990 年提出的字符串模式匹配. 其效率在匹配随机的字符串时比其他匹配算法还要更快.Sunday 算法的实现可比 KMP,BM 的实现 ...

  6. 字符串匹配 sunday算法

    #include"iostream" #include"string.h" using namespace std;//BF算法 int strfind(cha ...

  7. Sunday算法模板

    Sunday是一个线性字符串模式匹配算法.算法的概念如下: Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法.其核心思想是:在匹配过程中,模式串并不被要求一定要 ...

  8. PHP 字符串匹配算法 Sunday算法

    搜索文本 text = "my testing algorithm in test" 模式 pattern = "test" Sunday算法的关键点在于 1. ...

  9. BF、KMP、BM、Sunday算法讲解

    原文地址: https://www.cnblogs.com/Syhawk/p/4077295.html BF.KMP.BM.Sunday算法讲解 字串的定位操作通常称作串的模式匹配,是各种串处理系统中 ...

最新文章

  1. 如何判断两个单向链表是否有相交,并找出交点
  2. mysql inode_Linux中inode的大小、作用讲述
  3. PHP网站源码-ThinkPHP5框架内核开发图书管理系统
  4. 什么是响应式Web设计?怎样进行?
  5. ListView(3)
  6. huffman算法c语言程序,哈夫曼算法构造代码
  7. 取PE文件OriginalFilename-解析VERSION资源
  8. Math,Number
  9. 性能优化-简谈JVM
  10. linux 内核logo 居中,linux logo制作及居中显示
  11. DeepRacer 资源合集
  12. oppok3如何刷机_数码知识:oppok3怎么刷机刷机教程
  13. kettle数据清洗
  14. 2021年 阿里云商标注册申请的相关详情及分类介绍
  15. 咖啡,为什么有些比较甜?
  16. 基金的选择方法及MATLAB实现
  17. 使用IPC扫描器进行网络扫描
  18. Pycharm2018破解版破解教程 Pycharm2018安装激活永久破解详细教程
  19. windows 电脑锁屏时,WPS软件自带屏保图片保存的位置
  20. html画布设计,10个会让你惊叹不已的HTML5画布(canvas)技术应用

热门文章

  1. MySQL索引数据结构及算法原理
  2. Anaconda/Conda创建环境时报错的解决方案
  3. nodejs+vue 智慧餐厅点餐餐桌预订系统
  4. AD各种布线方法总结
  5. 想要制作令人震撼的大屏可视化,要如何提升自己的可视化效果?
  6. [网盘工具/百度网盘]秒传链接的使用 -2022版油猴网页脚本
  7. python空类型用什么表示_python空集合如何表示
  8. 人工智能发展如何,未来有哪些就业方向?
  9. Nginx基于IP的访问控制
  10. git 将本地项目关联到远程仓库