首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文详解 KMP 算法

给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。 如果不存在,则返回 -1 。...其中枚举的复杂度为 ,构造和比较字符串的复杂度为 。整体复杂度为 。 空间复杂度: 。...同时在每一次匹配失败时,去检查已匹配部分的相同「前缀」和「后缀」,跳转到相应的位置;如果不匹配则再检查前面部分是否有相同「前缀」和「后缀」,再跳转到相应的位置......所以我们的重点在于如何在 复杂度内处理处 next 数组。 3. next 数组的构建 接下来,我们看看 next 数组是如何在 的复杂度内被预处理出来的。...总结 KMP 算法的应用范围要比 Manacher 算法广,Manacher 算法只能应用于「回文串」问题,相对比较局限,而「子串匹配」问题还是十分常见的。

89652

前端技术工具类文章

可以匹配“does”或“does”中的“do”。?等价于{0,1}。 {n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。...请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。...[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。 \b 匹配一个单词边界,也就是指单词和空格间的位置。...\d 匹配一个数字字符。等价于[0-9]。 \D 匹配一个非数字字符。等价于[^0-9]。 \f 匹配一个换页符。等价于\x0c和\cL。 \n 匹配一个换行符。等价于\x0a和\cJ。...\t 匹配一个制表符。等价于\x09和\cI。 \v 匹配一个垂直制表符。等价于\x0b和\cK。 \w 匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。 \W 匹配任何非单词字符。

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PostgreSQL 教程

    FETCH 限制查询返回的行数。 IN 选择与值列表中的任何值匹配的数据。 BETWEEN 选择值范围内的数据。 LIKE 基于模式匹配过滤数据。 IS NULL 检查值是否为空。 第 3 节....自连接 通过将表与自身进行比较来将表与其自身连接。 完全外连接 使用完全连接查找一个表中在另一个表中没有匹配行的行。 交叉连接 生成两个或多个表中的行的笛卡尔积。...条件表达式和运算符 主题 描述 CASE 向您展示如何使用CASE表达式构成条件查询。 COALESCE 返回第一个非空参数。您可以使用它将NULL替换为一个默认值。...PostgreSQL 技巧 主题 描述 如何比较两个表 描述如何比较数据库中两个表中的数据。 如何在 PostgreSQL 中删除重复行 向您展示从表中删除重复行的各种方法。...如何生成某个范围内的随机数 说明如何生成特定范围内的随机数。 EXPLAIN 语句 指导您如何使用EXPLAIN语句返回查询的执行计划。

    59210

    1 认识正则表达式

    exec()方法的参数是待匹配的字符串str,匹配成功时,该方法的返回值是一个数组,否则返回null。...\S 匹配一个非空白符 \w 匹配任意一个字母(大小写)、数字和下划线 \W 匹配任意一个非“字母(大小写)、数字和下划线”的字符 \b 匹配单词分界符。...如“\bg”可以匹配“best grade”,结果为“g” \B 非单词分界符。...可匹配从hello开始到world结束,中间包含零个或多个任意字符的字符串。 正则在实现指定数量范围的任意字符匹配时,支持贪婪匹配和惰性匹配两种方式。...当字符串为空时,split()方法返回的是一个包含一个空字符串的数组“[“”]”,如果字符串和分隔符都是空字符串,则返回一个空数组“[]”。

    8710

    「思维导图学前端 」初中级前端值得收藏的正则表达式知识点扫盲

    如果是用空格匹配,那么match的结果数组中的第一项就是" love ",是带了空格的,然而很多时候我们不希望在结果中得到空格,所以\b存在的意义也就比较明显了。 \B 与\b相反,代表非单词边界。...那么我们在match方法的返回结果中就可以取到这两个分组匹配的结果,group[1]是"123456789",group[2]是"hahaha"。...看到这里,我不禁也产生了疑问,既然我不需要引用非捕获组,那么非捕获组的意义何在?...结果数组是数组,数组也是对象类型数据,所以结果数组还有两个属性分别是index和input index代表匹配到的字符位于原始字符串的基于0的索引值 input则代表原始字符串 与test()一致,如果正则表达式设置了...match方法返回一个数组。 与exec()的不同点在于,如果match方法传入的正则表达式带了标识g,则将返回与完整正则表达式匹配的所有结果,但不会返回捕获组。

    45840

    前端架构师之12_JavaScript正则表达式

    exec()方法的参数是待匹配的字符串str,匹配成功时,该方法的返回值是一个数组,否则返回null。...\S 匹配一个非空白符 \w 匹配任意一个字母(大小写)、数字和下划线 \W 匹配任意一个非“字母(大小写)、数字和下划线”的字符 \b 匹配单词分界符。...如“\bg”可以匹配“best grade”,结果为“g” \B 非单词分界符。...可匹配从hello开始到world结束,中间包含零个或多个任意字符的字符串。 正则在实现指定数量范围的任意字符匹配时,支持贪婪匹配和惰性匹配两种方式。...当字符串为空时,split()方法返回的是一个包含一个空字符串的数组“[“”]”,如果字符串和分隔符都是空字符串,则返回一个空数组“[]”。

    7110

    一个正则表达式测试(只可输入中文、字母和数字)

    这个表达式就能够匹配“jian(guo)?”就可以匹配“jian”和“jianguo”。   {n}:n是一个非负数,匹配n次,如“guo{2}”,可以匹配“guoo”,不能匹配“guo”。   ...[xyz]:字符集合,匹配所包含的任意字符。如“[abc]”可以匹配“apple”中的“a”。   [^xyz]:匹配未被包含的字符。   [a-z]:字符范围,匹配指定范围内的任意字符。   ...:用于匹配除换行符之外的所有字符。     (说明:我们可以把\s和\S以及\w和\W看作互为逆运算) 下面,我们就通过实例看一下如何在正则表达式中使用上述元字符。...如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。 match 方法返回的数组有三个属性:input、index 和 lastIndex。...请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。

    5.3K20

    正则&highlight高亮实现(干货)

    :匹配任何非单词字符,[^0-9a-zA-Z_] \s 表示:匹配任何空白字符,空格、回车、制表符 \S 表示:匹配任何非空白字符 ....) test(str) 在字符串匹配是否有匹配模式的字符串,返回true/false exec 如果正则表达式中有子表达式,使用exec方法时 //返回的是:result[0] = 匹配结果 , result...,如果有,返回数组,无,返回null replace 将匹配模式匹配到的字符串进行替换 split 将字符串已匹配模式为分隔符进行字符串分隔,返回数组 总结 正则表达式就是我们实现某个功能的一个工具,...3、各种语言基本上都支持 目前如JAVA、PHP、Javascript、C#、C++等主流语言都支持正则表达式。...4、学习很简单,应用很高深 学习正则表达式很快也很简单,但是如何在实际开发中编写出高效地,精准地正则表达式,还是需要长时间的尝试和积累。

    2K120

    一个正则表达式测试(只可输入中文、字母和数字)

    因为nickNameTextField.text和pred匹配的时候返回的是YES。所以在判断他们匹配时的情况要加!。...这个表达式就能够匹配“jian(guo)?”就可以匹配“jian”和“jianguo”。   {n}:n是一个非负数,匹配n次,如“guo{2}”,可以匹配“guoo”,不能匹配“guo”。   ...,并将包含查找的结果作为数组返回。...如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。 match 方法返回的数组有三个属性:input、index 和 lastIndex。...请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。

    5.6K61

    正则表达式理论篇

    返回:一个由匹配结果组成的数组。 非全局检索:如果没有找到任何匹配的文本返回null;否则数组的第一个元素是匹配的字符串,剩下的是小括号中的子表达式,即a[n]中存放的是$n的内容。...返回:子串组成的数组。 RegExp的方法 RegExpObject.exec() 参数:字符串。返回: 非全局检索:与String.macth()非全局检索相同,返回一个数组或null。...如: RegExpObject.test() 参数:字符串。 返回:true或false。...$ 匹配结尾的位置。 \b 与一个字边界匹配,如er\b 与“never”中的“er”匹配,但与“verb”中的“er”不匹配。 \B 非边界字匹配。...\nml 当n 是八进制数字 (0-3),m 和 l 是八进制数字 (0-7) 时,匹配八进制转义码 nml。 修饰符 i 执行不区分大小写的匹配。

    1.2K20

    PHP正则表达式

    正则表达式是自左向右的顺序使用原子和元字符进行拼接。 比如'zxcv',进行匹配时,‘/.*/’,其中.*代表zxcv 。 那么通用原子和元字符有哪些呢?...• {n} n 为非负整数,匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 或‘Booob’,但是能匹配 "food" 中的两个 o。 • {n,} n 为非负整数。至少匹配n 次。...请注意在逗号和两个数之间不能有空格。 • [] 字符集合(字符域)。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。...(z|f)ood' 则匹配 "zood" 或 "food"。 • [-] 字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。 • (?...,2会把所有符合的字符串都匹配出来,并且放置到matches数组中,而且这两个函数都有一个整形的返回 值。

    4.6K10

    全面学习正则表达式,从原理到实战

    是4位16进制数字,代表对应的字符 \w 匹配任何一个字母或者数字或者下划线 \W 匹配任何一个字母或者数字或者下划线以外的字符 \s 匹配空白字符,如空格,tab等 \S 匹配非空白字符 \d 匹配数字字符...a或b或c [abc] 如果要表示字符很多,可以使用-表示一个范围内的字符,下面两个功能相同 [0123456789] [0-9] 在前面添加^,可表示非的意思,下面的代码能够匹配a``b``c之外的任意字符...:123)/) // 返回 ['123'] '123'.match(/(123)/) // 返回 ['123', '123'] 和分组相关的另一个概念是引用,比如在匹配html标签时,通常希望返回值并不是布尔值,而是返回匹配的结果 匹配成功返回一个数组,数组第一项是匹配结果,后面一次是捕获的分组 /abc(d)/.exec('abcd') // ["abcd", "d", index: ...0, input: "abcd"] 此数组还有另外两个参数,input是输入的字符串,index表示匹配成功的序列在输入字符串中的索引位置 如果有全局参数(g),第二次匹配时将从上次匹配结束时继续 var

    47920

    实现 strStr()----KMP算法,朴素模式匹配算法----超万字长文详解

    字符串相等返回0 大于返回正数 小于返回负数 compare函数六种重载形式: s2 比较s和s2 pos1,n1,s2 将s中从pos1开始的n1个字符与s2进行比较 pos1,n1,s2,pos2...开始的n1个字符与cp指向的以空字符结尾的字符数组进行比较 pos1,n1,cp,n2 将s中从pos1开始的n1个字符与指针cp指向的地址开始的n2个字符进行比较 2.非调用库函数的朴素模式匹配算法...当我们的原串指针从 i 位置后移到 j 位置,不仅仅代表着「原串」下标范围为 [i,j) 的字符与「匹配串」匹配或者不匹配,更是在否决那些以「原串」下标范围为 [i,j) 为「匹配发起点」的子集。...同时在每一次匹配失败时,去检查已匹配部分的相同「前缀」和「后缀」,跳转到相应的位置,如果不匹配则再检查前面部分是否有相同「前缀」和「后缀」,再跳转到相应的位置 … 这部分的复杂度是 O(m^2),因此整体的复杂度是...3. next 数组的构建 接下来,我们看看 next 数组是如何在 O(m)的复杂度内被预处理出来的。 假设有匹配串 aaabbab,我们来看看对应的 next 是如何被构建出来的。

    64240

    ES6学习笔记(七)正则表达式

    匹配确定的 n 次 {n,} n 是一个非负整数。至少匹配n 次 {n,m} m 和 n 均为非负整数,其中n <= m。...axbxcxxx 1.6 范围类 需要匹配数字时,可以使用范围类。...如果没有匹配的文本则返回 null,否则会返回一个结果“数组”对象: [匹配到的文本, 与第 1 个分组相匹配的文本,与第 n 个分组相匹配的文本…] index,声明匹配文本的第一个字符的位置 input...返回第一个匹配结果的 index,没有匹配到返回-1。不执行全局匹配。 match(reg),检索字符串以找到一个或多个与 regexp 匹配的文本,未找到返回 null,找到后返回一个数组。...split(reg),利用 regexp 匹配结果作为分隔符对字符串进行分割,返回一个数组。

    60610

    linux bash shell 特殊字符大全

    在测试结构中,可以用这两个操作符来进行连接两个逻辑值。||是当测试条件有一个为真时返回0(真),全假为假;&&是当测试条件两个都为真时返回真(0),有假为假。...##任何在b和9之间的内容(含) ##第一个是找到最短的符合匹配项 ##后一个是找最大符合的匹配项(贪婪匹配?) ~ 波浪号(Home directory[tilde])。...在数组的上下文中,表示数组元素,方括号内填上数组元素的位置就能获得对应位置的内容,如: Array[1]=xxx echo ${Array[1]}; 3....在测试结构中,可以用这两个操作符来进行连接两个逻辑值。||是当测试条件有一个为真时返回0(真),全假为假;&&是当测试条件两个都为真时返回真(0),有假为假。...##任何在b和9之间的内容(含) ##第一个是找到最短的符合匹配项 ##后一个是找最大符合的匹配项(贪婪匹配?) ~ 波浪号(Home directory[tilde])。

    6.6K30

    python 基本模块

    localtime([t]):返回时间的数组,有9个元素(年,月,日,时,分,秒,星期几,当年的第几天,是否夏令时),星期一为0    mktime(tlist):是localtime的反函数...: 非贪婪匹配之前的表达式m到n次 "\": 将下一个字符转义 [ABC]: 指定一个字符集 [^ABC]: 指定一个不在范围内的字符集 "A|B": 匹配条件A或条件B (pattern):...\B: 匹配非开头和结尾的空字符串,通常是指非单词边界??? \d: 匹配一个数字。等价于[0-9] \D: 匹配一个非数字。等价于[^0-9] \s: 匹配一个空白字符。...等价于[ \t\n\r\f\v] \S: 匹配一个非空白字符。等价于[^ \t\n\r\f\v] \w: 匹配一个字母数字字符。等价于[a-zA-Z0-9_] \W: 匹配一个非字母数字字符。...11.其它模块  filecmp.cmp(file1,file2):比较file1和file2的内容是否相同  dircmp:可以构造一个比较两个目录内容的对象,较强  getpass.getpass

    67720

    JavaScript 笔试题(二)

    undefined 与数值比较结果总是 false,因此 every 最终返回了 false。 join 函数的参数如果省略,数组元素用逗号(,)分隔。...其他的,如 filter 函数和 some 函数也会跳过数组中的空值,sort 函数在排序时 undefined 会排在数组后面,空值会排在 undefined 后面,无论做怎样的排序。...当数组中有 null 时,就比较奇特了,例如下面的比较: console.log("null < 1: ",null < 1); // true console.log("null 数组中有 0 和 null 时,给数组排序,0 可能出现在 null 之前,也可能出现在 null 之后。 扩展运算符浅复制一个数组,空值会被转成 undefined。...:x) 这种格式的匹配符与上面的断言很相似,但它不是断言。带有 ?: 的括号被称为“非捕获括号”,match 方法、exec 方法在不使用全局匹配时,都会返回匹配到的括号里的内容和全局内容。

    53520

    LeetCode 刷题记录(二)

    (最高位为符号位),翻转时如果溢出请返回 0。...如果该字符串的第一个非空格字符不是一个有效字符,则不需要进行转换,返回 0(其他不能有效转换的情况同理)。 注意:本题同样存在 32 位限制,如果超出此范围,返回最大值或最小值。...p 的 'a*',直接比较 'bb' 和 'bb' '*' 代表匹配一个或多个前面的元素,如 'aabb' 和 'a*bb',此时我们可以忽略掉 s 的第一个元素(要保证第一个元素匹配),比较 'abb...' 和 'a*bb' (此时又需要再分两种情况比较,通过递归实现) 上述两种情况,任意一种是匹配的,我们都可以认为 s 和 p 匹配。...i][j] = False 关于初始化,首先 dp 数组的大小为字符串和模式串的长度加一,因为要考虑空字符串的匹配情况。

    47620

    PHP--正则表达式和样式匹配--小记

    $pattern, string $subject [,array $matches [, int $flags] ]); 其实就是4个参数后两个皆为可选参数,如果matches部分有,就返回一个数组...请注意在逗号和两个数之间不能有空格。 ? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。...注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身. [^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。...例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。 \b 匹配一个单词边界,也就是指单词和空格间的位置。...\D 匹配一个非数字字符。等价于[^0-9]。 \f 匹配一个换页符。等价于\x0c和\cL。 \n 匹配一个换行符。等价于\x0a和\cJ。 \r 匹配一个回车符。等价于\x0d和\cM。

    1.9K10

    基础数据类型之String

    ,所以自然通过byte[] 构造String对象时,必须要有编码 不设定并不是没有,而是使用默认的 既然使用字节数组,那么有的时候可能需要指定范围,所以有两个根本的构造方法 然后还有默认字符编码的简化形式...char 值序列时,返回 true matches此字符串是否匹配给定的正则表达式public boolean matches(String regex) 相等比较 equals(Object) equals...(CharSequence) 这两个方法   分别针对参数StringBuffer  和 CharSequence 他们都是  当且仅当表示相同的 char 值序列时,结果才为 true 比较的也是内容...n 大于 0,则模式将被最多应用 n - 1 次 数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入 如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度...否则,将此 String 对象添加到池中,并返回此 String 对象的引用   它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern(

    77320
    领券