首页 > 其他分享 >回文树

回文树

时间:2023-04-10 14:15:01浏览次数:36  
标签:int father son fail now 回文

具体思想不多说
struct node{
int son[26];
int len;
int fail;
}t[N];

int cnt = 1,last = 0;
void init(){
t[0].fail = 1;
t[1].len = -1;
}
int getfail(int p,int r){
while(r-t[p].len-1 < 0 || s[r-t[p].len-1] != s[r])
p = t[p].fail;
return p;
}
int insert(int x,int r){
int father = getfail(last,r);
int now = t[father].son[x];
if(!now){
now = ++cnt;
t[now].len = t[father].len + 2;
t[now].fail = t[getfail(t[father].fail,r)].son[x];
t[father].son[x] = now;
}
last = now;
}
在此解释一下我开始搞不懂的地方
首先是t[now].fail = t[getfail(t[father].fail,r)].son[x];
T是S[i-1]所处理出的最长回文串,我们现在处理S[i],S[i]的字符为X,首先在T中一直找,它会找出A这个回文串,前面正好是X,当然A也可能是空串,现在这个点就是father结点,我们把X连到它的儿子上

那么X所在t中的结点代表的回文串就是XAX
现在要处理X在t中结点的fail指针,我们要找的是最长公共后缀,此时就不能包括father结点所代表的回文串了,只能从father结点沿着fail往上找,因为也就是在A里面找出XB,B为回文串
image
假如能找出XB,那么XBX一定是处理过了的,所以B在t中的结点一定有son[x]

标签:int,father,son,fail,now,回文
From: https://www.cnblogs.com/cintang/p/17302657.html

相关文章

  • PAT Basic 1079. 延迟的回文数
    PATBasic1079.延迟的回文数1.题目描述:给定一个\(k+1\)位的正整数\(N\),写成\(a_k⋯a_1a_0\)的形式,其中对所有\(i\)有\(0≤a_i<10\)且\(a_k>0\)。\(N\)被称为一个回文数,当且仅当对所有\(i\)有\(a_i=a_{k−i}\)。零也被定义为一个回文数。非回文数也可以通过一......
  • 2217. 找到指定长度的回文数
    题目描述给了一个正整数k,表示长度是k的所有回文数字再给了和很多q,问第q小的数字是多少?f1数学关系+构造基本分析从q之间的相互关系考虑还是单独考虑某个q和结果的关系?后者长度是k的回文数字有啥特性?前一半数字是固定的,half=k+1>>2,str[num][:half]以上性质和q有啥......
  • 链表的回文判断—Java实现
    对于这个题,主要是老是局限于方法内的变量,未想到借助外部变量辅助:具如下,不可用数除法,会溢出异常:即使是取最大的long也会溢出,常规方法不再赘述,具体以代码如下:1packageProblemSolve;23publicclassSolution5{4privateListNodefrontNode;5publicboolean......
  • 回文日期
    2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按“yyyymmdd”的格式写成一个8位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。有人表示20200202是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后......
  • 回文自动机
    概念回文自动机,PAM,又叫回文树。用于处理和回文子串有关的问题,和SAM有一些类似的地方。构造首先PAM上的每个结点代表原串的一个回文子串。根据神秘结论,原串本质不同的回文子串至多有\(n\)个,也就是PAM的点数至多是\(n+2\),边数至多是\(n\).考虑到回文串的奇偶性会......
  • 39. 组合总和 40.组合总和II 131.分割回文串
    39.组合总和自己写的回溯算法:classSolution{List<List<Integer>>list;LinkedList<Integer>res;publicList<List<Integer>>combinationSum(int[]candidates,inttarget){list=newArrayList<>();res=......
  • 洛谷P1217 [USACO1.5]回文质数 Prime Palindromes
    #include<bits/stdc++.h>usingnamespacestd;inta,b;boolzs(intx){if(x%2>0){for(inti=3;i<x;i+=2)if(x%i==0)returnfalse;returntrue;}elsereturnfalse;}boolhws(intx......
  • 【LBLD】如何判断回文链表
    【LBLD】如何判断回文链表判断回文单链表/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(nullptr){}*ListNode(intx,......
  • 最长回文字串之暴力解法
    最长回文字串是一个典型的算法问题,首先要搞清楚什么是回文。回文,故名思义就是对称的文字,比如“ABA”,比如“ABABC”中的“AB“。题目如下:给你一个字符串s,找到s中最长......
  • 力扣---面试题 01.04. 回文排列
    给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。......