首页 > 其他 > 详细

ACM 字符串基础

时间:2020-11-07 19:59:58      阅读:34      评论:0      收藏:0      [点我收藏+]

1.哈希

自定义的字符串映射。

将一串字符串用一定的转化方法,转化为一个值,比较字符串是否相同只需要比较值的相同与否即可。

哈希在很大程度上是没有漏洞的,可以自定义模数或者采用自然溢出的方法。

然而自然溢出已经有人研究出了卡哈希的方法。

为了提高哈希的正确性,后来就有了双哈希。

在一般情况下,哈希冲突的处理很少使用,尽可能避免冲突是提高哈希正确率的更好方法。

哈希冲突时需要定义解决冲突的方法,这一点其实是相当于再次映射,与其这样,如果两个哈希:)

2.KMP

首先来介绍一个叫做next数组的东西,next[i]表示字符串前next[i]位和末next[i]位完全相同。

朴素的字符串匹配,失配之后会从新开始,这样复杂度是O(len1*len2)的,不够快。

失配后如果可以从模式串的一个前缀重新开始就快很多了,这里next数组就派上了用场。

失配后不再是重新开始,而是从next[i]开始。

如果构建next数组呢?

构建的过程就是相当于自己和自己的前缀匹配,用已经构建出的next[i]来推出后来的next数组值。

3.manecher

一个快速找出回文串的算法。

回文串长度的奇偶性会影响我们对回文的判断,所以第一步是将所有回文串长度变为奇数,方法是在每个字符中间加入一个特殊字符。

定义数组P[i],表示以i为回文中心向左或向右可拓展的最长回文长度。

开两个变量x,y分别表示已知的最长回文的中心和该回文的最右端。

如果y>i,则P[i]=min(P[2*y-i],y-i)

这里2*y-i是i关于x的对称点。

如果y<i那i只能暴力匹配。

ACM 字符串基础

原文:https://www.cnblogs.com/lmlysklt/p/13941227.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!