75%,subString超出

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

// 注意类名必须为 Main, 不要有任何 package xxx 信息

public class Main {

static int max=0;

public static void main(String[] args) throws IOException {

BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(System.in));

String string=bufferedReader.readLine();

int[] arrayPatternNext=new int[string.length()];

arrayPatternNext=buildedString(string, arrayPatternNext);

int len=string.length();

if (max==0||max==len-1) {

System.out.println("Just a legend");

}else {

String targetString=string.substring(0,max);//待正确的字符串

string=string.substring(max,len-max);//去除前后缀剩余的字符串, 超出why

if (string.length()<targetString.length()){

System.out.println("Just a legend");

}else {

if (getCommonString(string,targetString,arrayPatternNext)){

System.out.println(targetString);

}else {

System.out.println("Just a legend");

}

}

}

}

private static boolean getCommonString(String a, String patternString, int[] arrayPatternNext) {

int i=0;int j=0;

while (i<a.length()){// 主串的下标一直往前走,则时间复杂度为线性

if (a.charAt(i)==patternString.charAt(j)){

i+=1;j+=1;

}else if (j>0){//因为当前面不匹配的时候,这个匹配串的下标就需要根据next数组作出调整

j=arrayPatternNext[j-1];

}else i+=1; //不相等,字串下标也没有动,主串下标就往前走

if (j==patternString.length()-1){

return true;

}

}

return false;

}

// todo 构建next数组

private static int[] buildedString(String patternString,int[] arrayPatternNext) {

int prefix_len=0;// 共同前缀

int i=1;

char[] chars=patternString.toCharArray();

while (i<patternString.length()){

if (chars[prefix_len]==chars[i]){

prefix_len+=1;

arrayPatternNext[i]=prefix_len;

i+=1;

}else {

if (prefix_len==0){//没有公共前缀

arrayPatternNext[i]=0;

i+=1;

}else prefix_len=arrayPatternNext[prefix_len-1];

}

}

max=arrayPatternNext[arrayPatternNext.length-1];

return arrayPatternNext;

}

}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
程序员牛肉:主要是因为小厂的资金本来就很吃紧,所以更喜欢有实习经历的同学。来了就能上手。 而大厂因为钱多,实习生一天三四百的就不算事。所以愿意培养你,在面试的时候也就不在乎你有没有实习(除非是同级别大厂的实习。) 按照你的简历来看,同质化太严重了。项目也很烂大街。 要么换项目,要么考研。 你现在选择工作的话,前景不是很好了。
点赞 评论 收藏
分享
代码飞升:别用口语,后端就写后端,前端就写前端,最后别光后悔
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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