Good Luck!_JAVA
生活随笔
收集整理的這篇文章主要介紹了
Good Luck!_JAVA
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
我們都知道,前綴就是一個單詞的前幾個字母(長度小于單詞長度);后綴就是一個單詞的后幾個字母(長度小于單詞長度)。例如:Hello,{H,He,Hel,Hell}都是Hello的前綴,{ello,llo,lo,o}都是Hello的后綴。現在,給你一個字符串String,你的任務是找出一個字串s,s既是String的前綴,又是String的后綴,并且s也出現在String的中間部分(既不是前綴,也不是后綴),s的長度越長越好。
Input
輸入一個N,接下來N行,每行一個字符串String,String長度len( 1 <= len <= 1000000)。
Output
輸出只有一行,如果有符合條件的s,輸出長度最長的s,如果沒有,輸出“Bad Luck!”(不含引號)。
Sample
Input
3
abcabcabcabcabc
papapapap
aaabaaaabab
Output
abcabcabc
papap
Bad Luck!
Hint
//oj3超時 import java.util.*;class Charact {String str;public Charact(String str) {super();this.str = str;}public int[] get_next() {int[] next = new int[1000006];int i = 1, k = -1;next[0] = -1;while (i < str.length()) {while (k != -1 && str.charAt(i) != str.charAt(k + 1)) {k = next[k];}if (str.charAt(i) == str.charAt(k + 1)) {k++;}next[i] = k;i++;}return next;}public void isLuck(int[] next) {int len = str.length() - 1, flag = 1;if (str.length() < 3 || next[len] == -1) {System.out.println("Bad Luck!");} else {while (next[len] != -1) {String ss = str.substring(0, next[len] + 1);int t1 = str.indexOf(ss, 1);int t2 = str.length() - next[len] - 1;if (t1 != t2) {flag = 0;System.out.println(str.substring(0, next[len] + 1));break;}len = next[len];}if(flag == 1)System.out.println("Bad Luck!");}} }public class Main {public static void main(String args[]) {Scanner reader = new Scanner(System.in);int n = reader.nextInt();reader.nextLine();for(int i = 0; i < n; i++) {Charact charact = new Charact(reader.next());int[] next = new int[1000006];next = charact.get_next();charact.isLuck(next);}reader.close();} }//AC import java.util.*;public class Main {static int[] Next = new int[1000006];public static void main(String[] args) {Scanner input = new Scanner(System.in);int n;String str;n = input.nextInt();input.nextLine();for (int i = 0; i < n; i++){str = input.next();prefix_table(str);int len = str.length() - 1, flag = 1;if (str.length() < 3 || Next[len] == -1) {System.out.println("Bad Luck!");}else{while (Next[len] != -1){String ss = str.substring(0, Next[len] + 1);int t1 = str.indexOf(ss, 1);int t2 = str.length() - Next[len] - 1;if (t1 != t2){flag = 0;System.out.println(str.substring(0, Next[len] + 1));break;}len = Next[len];}if (flag == 1){System.out.println("Bad Luck!");}}}input.close();}private static void prefix_table(String str){int i = 1, k = -1;;Next[0] = -1;while (i < str.length()){while (k != -1 && str.charAt(i) != str.charAt(k + 1)){k = Next[k];}if (str.charAt(i) == str.charAt(k + 1)){k++;}Next[i] = k;i++;}} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Good Luck!_JAVA的全部內容,希望文章能夠幫你解決所遇到的問題。