Good Luck!(KMP)
生活随笔
收集整理的這篇文章主要介紹了
Good Luck!(KMP)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Good Luck!
Time Limit:?1000 ms?Memory Limit:?65536 KiB Submit?StatisticProblem 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 aaabaaaababSample Output
abcabcabc papap Bad Luck! import java.util.*; public class Main { static int[] next = new int[1000001];static void getNext(String s){int j = -1;next[0] = -1;for(int i = 1; i < s.length(); i++){while(j != -1 && s.charAt(i) != s.charAt(j + 1))j = next[j];if(s.charAt(i) == s.charAt(j + 1)) j++;next[i] = j;}}public static void main(String[] args){ Scanner in = new Scanner(System.in); int n = in.nextInt();while(n-- > 0){String str = in.next();getNext(str);int len = str.length();if(next[len-1] == -1 || len < 3)System.out.println("Bad Luck!");else{int l = len - 1;boolean res = false;while(next[l] != -1){if(str.indexOf(str.substring(0, next[l] + 1), 1) != len - 1 - next[l]){System.out.println(str.substring(0, next[l] + 1));res = true;break;}l = next[l];}if(!res)System.out.println("Bad Luck!");}}} }總結
以上是生活随笔為你收集整理的Good Luck!(KMP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Z05 - 034、访客分析 - 每日新
- 下一篇: Easyx-----c++实现经典Win