首页 > 其他分享 >Z 函数

Z 函数

时间:2022-11-23 20:57:49浏览次数:49  
标签:函数 所以 此时 长度 我们 前缀

简单记一下,避免忘记。

z 函数

对于字符串 \(S\),我们将 \(z(i)\) 定义为从 \(i\) 开始的后缀与 \(S\) 的最长公共前缀的长度。

\(O(n)\) 求出 z 函数

我们添加一个分隔符,将 \(S\) 的真正下标变为从 1 开始。此时显然 \(z(1)=n\)。

我们需要 \(r\) 最大的匹配串 \(S[l:r]\) ,即为当前最大的 \(l+z(l)-1\) 。

如果 \(i > r\),显然此时任何之前的 \(z(j)\) 都无法对其提供贡献,所以只能从 \(0\) 开始求。

如果 \(i \le r\),由于 \(S[l:r]\) 与 \(S\) 的前缀匹配,所以 \(S[i-l+1:r-l+1]=S[i:r]\)。但我们并不知道 \(S\) 的前缀与 \(S[i:r]\) 的关系。

根据 z 函数的定义我们可知:\(S[1:1 + z(i-l+1)-1] = S[i-l+1:i-l+1+z(i-l+1)-1]\)

所以实际上我们能确定的相同的只有 \(z(i-l+1)\) 的长度相同。

我们还需要额外考虑一件事:\(i+z(i-l+1)-1\) 是有可能大于 \(r\) 的。但此时我们连第一个等式都不确定了,所以大于的部分并不确定相不相等。所以 \(z(i)\) 最大初始化长度不能超过 \(r-i+1\)。

注意求出 \(z(i)\) 后更新 \(l\) 和 \(r\)。

标签:函数,所以,此时,长度,我们,前缀
From: https://www.cnblogs.com/closureshop/p/16919747.html

相关文章

  • Pandas的to_sql()函数
    df.to_sql参数介绍:name:SQL表的名称。con:sqlalchemy.engine.Engine或sqlite3.Connection使用SQLAlchemy可以使用该库支持的任何数据库。为sqlite3.Connection对象提供......
  • Oracle函数NULLIF
    1、NULLIF函数函数语法:NULLIF(Expression1,Expression2)函数功能:如果来个表达式相等,则返回NULL值,否则返回第一个表达式功能很简单,但是要注意以下几种情况:1)两个......
  • 详解支持向量机-探索核函数的优势和缺陷【菜菜的sklearn课堂笔记】
    视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili看起来,除了Sigmoid核函数,其他核函数效果都还不错。但其实rbf和pol......
  • mysql/hive——date_format()日期格式化函数
    参考:https://www.w3school.com.cn/sql/func_date_format.asp 与oracle的to_date()字符串转日期,to_char()日期转字符串不同,mysql与hive使用date_format()进行日期格式......
  • JavaScript decodeURI() 函数 Url 解码
    定义和用法decodeURI()函数可对encodeURI()函数编码过的URI进行解码。语法decodeURI(URIstring)参数描述URIstring必需。一个字符串,含有要解码的URI或其他要解码......
  • JavaScript encodeURI() 函数 Url编码
    定义和用法encodeURI()函数可把字符串作为URI进行编码。语法encodeURI(URIstring)参数描述URIstring必需。一个字符串,含有URI或其他要编码的文本。返回值URIstring......
  • JavaScript unescape() 函数解码
    定义和用法unescape()函数可对通过escape()编码的字符串进行解码。语法unescape(string)参数描述string必需。要解码或反转义的字符串。返回值string被解码后的一个......
  • JavaScript escape() 函数编码
    定义和用法escape()函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。语法escape(string)参数描述string必需。要被转义或编码的字符串。返回值已编码......
  • yield函数
    20221123为什么引入yield节省内存,即用即取每次调用,执行到yield行return一个值,停止运行函数。下次调用,从yield的下一行接着执行。deffoo():print("starting..."......
  • SQL Server数据类型转换函数cast()和convert()详解
    https://blog.csdn.net/m0_67401382/article/details/126117592常用的函数有cast()和convert()。cast()和convert()函数比较:(1)cast一般更容易使用,convert的优点是可以格......