字符串学习笔记

字符串学习笔记

注:本文涉及到的所有变量名均与模板中变量名同步。模板链接


一、Hash

1、双Hash

2、链式Hash

3、树Hash


二、KMP

1、概述

查询字符串 \(t\) 在字符串 \(s\) 中出现过的所有位置。时间复杂度 \(O(len(s)+len(t))\)。

char *s = "abacaba";
char *t = "aba";

0 1 2 3 4 5 6

a b a c a b a

\(t\) 在 \(s\) 中出现过的位置为0、4。

2、维护什么?

t:  a  b  a
nt:-1 -1  0
s:  a  b  a  c  a  b  a
ns: 0  1  2 -1  0  1  2 

\(nt_i\) 表示 \(t[0...i]\) 的后缀最长能匹配的前缀是 \(t[0..nt_i]\)

\(ns_i\) 表示 \(s[0...i]\) 的后缀最长能匹配的前缀是 \(t[0..ns_i]\)

3、能做什么?


三、exKMP


四、AC自动机


五、后缀数组


六、后缀树


七、后缀自动机


八、Manacher


九、回文树

原文地址:https://www.cnblogs.com/wuyuanyuan/p/8424374.html

时间: 2024-10-10 01:14:33

字符串学习笔记的相关文章

网易云课堂程序设计入门--C语言第七周:指针与字符串学习笔记

====================================== 第七周:指针与字符串学习笔记 网易云课堂 程序设计入门–C语言 指针与字符串 学习笔记 ====================================== 7-1指针初步 7-1-1类型大小与取地址运算 sizeof是一个运算符 给出某个变量货类型在内存中所占据的字节数 sizeof(int); sizeif(i); double变量在内存中占据的空间是int变量的两倍 { int a; a =6; prin

Java字符串学习笔记

通过看jdk源码发现Java字符串中有如下关系: 接口中的方法默认都是抽象的可以写也可以不写. public interface CharSequence { int length(); char charAt(int index); CharSequence subSequence(int start, int end); public String toString(); } 其他的都是该接口的实现类且是最终类,不能被继承. public final class String impleme

蓝鸥Unity开发基础——使用字符串学习笔记

蓝鸥Unity开发基础使用字符串 本节内容:使用字符串:字符串拼接.转义字符 一.字符串拼接:字符串可以使用+或+=进行字符串拼接!! 二.转移字符--举例\n(表示回车.换行) 转移字符 转义_转义意义 \n_表示换行或回车 \t_表示制表符 \"_表示双引号 \'_表示单引号 \\_表示反斜杠 在字符串前面加@符号,会使字符串的转义字符失效! 字符串中转义字符失效之后,我们需要使用两个双引号来打印双引号 源代码 using System; namespace Lesson08{    cla

JS字符串学习笔记

常用的几个函数: charAt()  返回指定位置的字符. concat()  连接字符串,跟+差不多. indexOf() 返回指定字符串的索引位置.注意是字符串. match() 找到一个或多个正则表达式的匹配.正则还不会用.... substr()  从起始索引号提取字符串中指定数目的字符.例如:str1.substr(0,1)  从索引0开始的1个字符,即第一个字符.第二个参数是可选的. substring()  提取字符串中两个指定的索引号之间的字符. 例: var str1="Hel

python学习笔记2—python文件类型、变量、数值、字符串、元组、列表、字典

python学习笔记2--python文件类型.变量.数值.字符串.元组.列表.字典 一.Python文件类型 1.源代码 python源代码文件以.py为扩展名,由pyton程序解释,不需要编译 [[email protected] day01]# vim 1.py #!/usr/bin/python        print 'hello world!' [[email protected] day01]# python 1.py hello world! 2.字节代码 Python源码文件

《Javascript权威指南》学习笔记之十一:处理字符串---String类和正则表达式

一.正则表达式的基本语法 1.概念:正则表达式由普通字符和特殊字符(元字符)组成的文本模式,该模式描述在查找字符串主体时待匹配的一个或者多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 普通字符包括所有的大小写字母字符.所有数字.所有标点符号及一些特殊符号.普通字符本身可以组成一个正则表达式,也可以和元字符组合组成一个正则表达式:而元字符则具有特殊的含义,包括().[].{}./.^.$.*.+.?...|.-.?:.?=.?! 2.基本语法 3.优先权含义 二.使用

ADO.NET学习笔记之连接字符串

ADO.NET 2.0学习笔记之连接字符串 刚刚入门不久,想什么学习下dot net平台,就先从数据访问入手吧,从今天开始认真学习ado.net 2.0,为将来发展做好坚实基础. 连接字符串 SQL Client .net数据提供程序在连接到数据库时极其灵活,它提供了多种用以生成连接字符串的方式.可以使用关键字,例如“Data Sourse”.“Initial Catalog”,也可以使用"Server".“Database”等旧术语. 下面是两个例子,用于连接到SqlServer数据

MySQL学习笔记之九 字符串模式匹配

我们在使用查询的时候,经常会碰到模糊条件查询,而模糊查询就涉及到了字符串模式匹配. 在这里,主要讲两个:标准的SQL模式匹配.扩展正则表达式模式匹配.     一.标准的SQL模式匹配 SQL的模式匹配允许你使用"_"匹配任何单个字符,而"%"匹配任意数目字符(包括零个字符).在MySQL中,SQL的模式缺省是忽略大小写的.下面显示一些例子.注意在你 使用SQL模式时,你不能使用=或!=:而使用LIKE或NOT LIKE比较操作符. 为了找出包含正好5个字符的名字,

Swift学习笔记(4)--字符串及基本使用

String是例如"hello, world","海贼王" 这样的有序的Character(字符)类型的值的集合,通过String类型来表示. Swift 的String类型与 Foundation NSString类进行了无缝桥接.如果您利用 Cocoa 或 Cocoa Touch 中的 Foundation 框架进行工作.所有NSString API 都可以调用您创建的任意String类型的值.除此之外,还可以使用本章介绍的String特性.您也可以在任意要求传