首页 > 其他分享 >字符串

字符串

时间:2024-08-14 21:16:53浏览次数:11  
标签:初始状态 后缀 所有 字符串 自动机 回文

byT_Q_X

回文自动机(\(PAM\))

回文自动机\(PAM\)是一个能够识别一个字符串所有的回文子串的自动机,是一个 字符串所有回文子串的信息的高度压缩得到的结果。

回文自动机维护了原串上的所有本质不同的回文串。

回文自动机的结构可以看成是两棵树,一棵的根是奇根 \(odd\),代表着一个长度为 \(−1\) 的实际上不存在的回文串,存储所有长度为奇数的回文串,一棵的根是偶根 \(even\),代表着长度为 \(0\) 的回文串,存储所有长度为偶数的回文串。

自动机的每一个转移对应树上的一条边,同时带有一个字符 \(c\),如果这条边连接 \(u → v\),那么 \(s_v\) 就是 \(s_u\) 在前后分别加上字符 \(c\) 组成的,\(s_u\) 是 \(u\) 节点维护的回文 串。显然,这样做可以表示出所有的回文子串。 此外,同样对每个节点 \(x\) 连接一条失配边 \(fail[x]\) 指向它对应回文串的最长回文 后缀。那么通过一路条 \(fail\),可以找到该回文串的所有回文后缀。\(fail\) 边同样组 成一棵近似树的结构。

后缀自动机(SAM)

后缀自动机是一个能识别字符串 s 的所有后缀的最小 \(DFA\),不理解什么是 \(DFA\) 也没关系,总之就是它满足以下性质:

• \(SAM\) 是一个 \(DAG\),节点被称为状态,边被称为转移,每个转移上是一个字 母。

• 存在一个初始状态,从初始状态出发能到达任意节点,并且将从初始状态出 发的任意路径上的所有转移的字母写下来就是 \(s\) 的一个子串,\(s\)的每一个子 串均能被这样的路径表示出来。

• 存在若干个终止状态,从初始状态到终止状态的任意路径都是 \(s\) 的一个后 缀,\(s\) 的每一个后缀都可以由这样的方式表示出来。

• \(SAM\) 的状态数、转移数都是线性的。

标签:初始状态,后缀,所有,字符串,自动机,回文
From: https://www.cnblogs.com/Peng1984729/p/18359786

相关文章

  • 字符串后缀相关
    1.后缀数组1.1内容我们将一个字符串\(s\)的所有后缀按照字典序从小到大排序得到数组\(sa\),其中\(sa_i\)表示以\(sa_i\)开始的后缀排名是第\(i\)个。这个数组就叫后缀数组(SuffixArray,SA)。考虑到长度各不相同,所以显然是个排列,设数组\(rk\)是这个数组的逆排列。......
  • Android-代码混淆及字符串加密
    代码混淆使用ProGuard&R8一些参考链接Android混淆,新引入的D8、R8改变了什么?sdk打包必备,proguard混淆规则如何配置开启混淆app/build.gradle.android.buildTypesrelease{minifyEnabledtrue//开启混淆proguardFilesgetDefaultProguardFile('proguard-and......
  • C#字符串梳理及练习
    一、字符串API梳理:字符串:字符串不可以被修改,一般调用字符串API的时候使用新的变量来接收usingSystem;usingSystem.Linq;namespace_10.梳理字符串API{internalclassProgram{staticvoidMain(string[]args){//1。......
  • 字符串算法学习笔记
    注:码风较差,慎读1.hash算法相对于字符串,数字相对来说好处理一些,我们可以考虑把每一个字符串都对应一个数字,这样就可以非常简便地解决字符串的一些问题,而且效率还极高字符串哈希,就是一种可以理解为将字符串映射到一个整数的方法。比如BKDPHash是一种很好的哈希算法,假如字符串为a......
  • c语言替换字符串 Replace the first ‘oldstr‘ with ‘newstr‘ in ‘srcstr‘
    #include<string.h>#include<stdlib.h>#include<stdio.h>#include<time.h>#include<ctype.h>#include<sys/stat.h>voidgetdate(char*datestr,char*format){ time_tnnowtime=time(NULL); structtm*ptmTemp=loc......
  • 从字符串里面解析数组
    需求,从一个字符串里面,解析出一个数组。例如:“1,2,3,4,5”,"1-5","1,2,4","5-10,12,13"能正常解析出一个数组出来。字符串里面,支持“,”,"-"2种用法。 #include<iostream>#include<string>#include<vector>#include<sstream>#......
  • 字符串及转义字符
    字符串在c语言中形如‘a' ’b' ‘c'等单个字母被命名为字符常量而形如“abcdef”等则被命名为字符串在c语言中,有整形,单精度浮点数,字符数据类型但却没有字符串类型所以在初始化字符串时与初始化字符相同列:charch=’w‘   chararr[10]尤为注意的是在[ ]......
  • 格式化字符串漏洞
    一、格式化字符串漏洞原理格式化字符串是一种很常见的漏洞,其产生根源是printf函数设计的缺陷,即printf()函数并不能确定数据参数arg1,arg2…究竟在什么地方结束,也就是说,它不知道参数的个数。它只会根据format中的打印格式的数目依次打印堆栈中参数format后面地址的内容格式字......
  • 字符串算法
    KMP算法前言update2024.7.31今天重写了一篇KMP板子,之前是蒟蒻(现在也是),写的都是什么鬼,甚至没过模板题。感觉KMP优化没什么用,但是暂时保留吧。简介用模式串匹配文本串(主串)。对于一个模式串,找出每个位置的border(最长相等的前缀后缀),即为\(next\)数组。失陪时就跳到bord......
  • USB协议详解第8讲(USB描述符-字符串和语言ID描述符)
    1.字符串描述符相关概念字符串描述符:首先,字符串描述符就是用字符串描述一个设备的一些属性,毕竟人能看懂的是字符,而不是十六进制,描述的属性包括设备厂商名字、产品名字、产品序列号、各个配置名字、各个接口名字,还有就是由我们用户自己定义的字符串,说白了就是起名字,让人们一看就知......