B. Password

题意:

找最长的子串,在前缀、后缀以及中间(不包括首尾字符)出现过。

#include<bits/stdc++.h>
using namespace std;
void zft(string s) {
	int n=(int)s.length();
	vector<int>z(n);
	for(int i=1,l=0,r=0;i<n;++i) {
		if(i<=r&&z[i-l]<r-i+1) z[i]=z[i-l];
		else {
			z[i]=max(0,r-i+1);
			while(i+z[i]<n&&s[z[i]]==s[i+z[i]]) ++z[i];
		}
		if(i+z[i]-1>r) l=i,r=i+z[i]-1;
	}
	int x(0),ans(0),a(0),b(0);
	for(int i=1;i<n;++i) {
		if(i+z[i]==n) {
			if(z[i]>a) {
				b=a;
				a=z[i];
			}
			else if(z[i]>b) b=z[i];
		}
		else if(z[i]>x) x=z[i];
	}
	if(x>=a) ans=a;
	else ans=b;
	if(ans) cout<<s.substr(0,ans)<<'\n';
	else cout<<"Just a legend\n";
}
int main() {
	cin.sync_with_stdio(false);
	cin.tie(nullptr),cout.tie(nullptr);
	string s;
	cin>>s;
	zft(s);
}
z函数 文章被收录于专栏

null

全部评论

相关推荐

丿南烟丶:黑白模板吧,不要这样花哨的。 主要成就太空了,和获奖融在一起,写一两行就行了。 职业技能不要这样排,就传统的掌握精通什么什么然后举例补充的一些重要技术点。 自我介绍说实话也没啥用,可以删了。 把自己的两个项目方案细节补充上去,为什么这样设计,怎么设计,成果是什么按star法则来写 你要引导面试官来问你的技能和项目,你的获奖和自我介绍别人可能看都不看一眼或者不太在乎,重要的是展示你能干活的能力
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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