求字符串中回文子串的个数(回文树详解)
写法一: #include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> #include<vector> #include<cmath> #include<string> #include<map> #include<queue> using namespace std; const int MAXN = 1005; struct node { int next[26];//指向在当前节点串的基础上左右两边同时添加相同字符后形成的回文串 int len;//此节点串的长度 int sufflink;//此节点的最长后缀回文串的指针 int num;//此节点中的回文子串的个数 }; int len; char s[MAXN]; node tree[MAXN]; int num; // node 1 - root with len -1, node 2 - root with len 0 int suff; // max suffix palindrome long long ans; bool addLetter(int pos) { int cur = suff;//当前以pos-1结尾的最长后缀回文子串的节点标号(即p的长度) int curlen; int let = s[pos] -