字符串
run around
这个作者很懒,什么都没留下…
展开
-
马拉车(Manacher)算法
Manacher算法是查找一个字符串的最长回文子串的线性算法。 把长度为奇数的回文串和长度为偶数的回文串一起考虑,具体做法是,在原字符串的每个相邻两个字符中间插入一个分隔符,同时在首尾也要添加一个分隔符,分隔符的要求是不在原串中出现,一般情况下可以用#号。为了边界问题,我们在字符串起始位置加入两个不同的字符。 用一个辅助数组hw[i]表示以字符a[i]为中心的最长回文字串的最右字符到a[i]的长度...原创 2019-07-26 14:25:49 · 95 阅读 · 0 评论 -
KMP算法
有一个文本串a,和一个模式串b,现在要查找P在S中的位置 //算法复杂度O(n) #include <iostream> #include <string> using namespace std; int next[1000005]; //next[i],表示b[i]之前(不包括b[i])的字符串中,有next[i]长度的相同前缀后缀。 void getNext(s...原创 2019-07-27 15:07:15 · 84 阅读 · 0 评论 -
扩展kmp
/* 扩展kmp 求对于原串S1的每一个后缀子串与模式串S2的最长公共前缀 nxt[i]表示为S2中以i为起点的后缀字符串和S2的最长公共前缀长度 extend[i]表示为以S1中以i为起点的后缀字符串和S2的最长公共前缀长度 复杂度:O(n+m) */ #include <iostream> #include <string> using namespace std;...原创 2019-08-12 18:54:35 · 62 阅读 · 0 评论