hash判断回文串
hash的计算方法参考《字符串哈希》
建立正反两向的字符串哈希数组
for (int i = 1; i <= n; i++) { p[i] = p[i - 1] * P; h[i] = h[i - 1] * P + str[i]; // } for (int i = n; i >= 1; i--) { L[i] = L[i + 1] * P + str[i]; // }
如果某一段字符串正向的hash值和反向的hash值相同,则这一段字符串是回文串
ULL checkH(int l, int r) { return h[r] - h[l - 1] * p[r - l + 1]; } ULL checkL(int l, int r) { return L[l] - L[r + 1] * p[r - l + 1]; } if (checkH(l, r) == checkL(l, r)) { true; } else { false; }
本文作者:-37-
本文链接:https://www.cnblogs.com/-37-/p/17690120.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步