最长回文串算法

int manacher(char str[]) {
	temp[0] = '$';
	temp[1] = '#';
	for (int i = 1; i <= n; i++) {
		temp[i * 2] = str[i - 1];
		temp[i * 2 + 1] = '#';
	}
	temp[2 * n + 2] = '\0';
	int mx = 0;
	int maxlen = -1;
	int mid = 0;
	for (int i = 0; temp[i]; i++) {
		if (i < mx)
			len[i] = min(len[2 * mid - i], mx - i);
		else len[i] = 1;
		while (temp[i - len[i]] == temp[i + len[i]]) len[i]++;
		if (len[i] + i > mx) {
			mx = len[i] + i;
			mid = i;
		}
		maxlen = max(maxlen, len[i] - 1);
		if (len[i] - 1 >= m && (len[i] - 1 - m) % 2 == 0) {
			flag = true;
		}
	}
	return maxlen;
}

发布了86 篇原创文章 · 获赞 8 · 访问量 2239

猜你喜欢

转载自blog.csdn.net/Fawkess/article/details/103456018