题解 | #密码截取#

密码截取

https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1

马拉车
#include <string>
#include <vector>
#include <iostream>
using namespace std;

int mlc(string a) {
	string s = "^#";
	for (int i = 0; i < a.size(); i++) {
		s += a[i];
		s += "#";
	}
	s += "$";
	int zx = 0, right = 0, maxlen = 0;
	vector<int>len(s.size(), 0);
	for (int i = 1; i < s.size() - 1; i++) {
		len[i] = i < right ? min(len[2 * zx - i], right - i) : 1;
		while (s[i + len[i]] == s[i - len[i]])
			len[i]++;
		if (i + len[i] > right) {
			right = i + len[i];
			zx = i;
		}
		if (len[i] > maxlen)
			maxlen = len[i];
	}
	return maxlen - 1;
}

int main() {
	string s;
	cin >> s;
	cout << mlc(s) << endl;
	return 0;
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务