「快乐前缀」 是在原字符串中既是 非空 前缀也是后缀(不包括原字符串自身)的字符串。
给你一个字符串 s
,请你返回它的 最长快乐前缀。如果不存在满足题意的前缀,则返回一个空字符串 ""
。
示例 1:
输入:s = "level" 输出:"l" 解释:不包括 s 自己,一共有 4 个前缀("l", "le", "lev", "leve")和 4 个后缀("l", "el", "vel", "evel")。最长的既是前缀也是后缀的字符串是 "l" 。
class Solution {
public String longestPrefix(String s) {
int len = s.length();
int x = 31;//进制
int y = 10000007;//模数
int a = 0;//正向取数,先进位再相加
int b = 0;//反向取数
int t = 1;
int lens = 0;
for (int i = 0; i < len-1; i++) {//必须是子串,len-1
a = (a * x + s.charAt(i)) % y;
b = (b + s.charAt(len - i - 1) * t) % y;//注意b的迭代规则
t = (t * x) % y;
if (a == b) lens = i + 1;
}
return s.substring(0, lens);
}
}