22.1.23Manacher算法、双端队列、单调栈
作者:继续不插电的名单 | 来源:互联网 | 2023-05-30 20:10
22.1.23Manacher算法、双端队列、单调栈1.Manacher算法1)用途:Manacher算法用于解决类似求某个字符串中最长的回文子串。(回文就是正着读和倒着读一样的结
22.1.23Manacher算法、双端队列、单调栈
1.Manacher算法
1)用途:
2)算法中的关键变量:
3)算法的流程:
伪代码:
public static char[] manacherString(String str) {
char[] charArr = str.toCharArray();
char[] res = new char[str.length() * 2 + 1];
int index = 0;
for (int i = 0; i != res.length; i++) {
res[i] = (i & 1) == 0 ? '#' : charArr[index++];
}
return res;
}
public static int maxLcpsLength(String str) {
if (str == null || str.length() == 0) {
return 0;
}
char[] charArr = manacherString(str);
int[] pArr = new int[charArr.length];
int C = -1;
int R = -1;
int max = Integer.MIN_VALUE;
for (int i = 0; i != charArr.length; i++) {
pArr[i] = R > i ? Math.min(pArr[2 * C - i], R - i) : 1;