日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Good Luck!(KMP)

發布時間:2024/3/26 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Good Luck!(KMP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Good Luck!

Time Limit:?1000 ms?Memory Limit:?65536 KiB Submit?Statistic

Problem 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

Sample 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。