1. 程式人生 > >[藍橋] 算法提高 周期字串

[藍橋] 算法提高 周期字串

ner abc size print rar new con 算法 void

時間限制:1.0s 內存限制:256.0MB

問題描述

  右右喜歡聽故事,但是右右的媽媽總是講一些“從前有座山,山裏有座廟,廟裏有個老和尚給小和尚講故事,講的什麽呢?從前有座山……”這樣循環的故事來搪塞右右。   我們定義,如果一個字符串是以一個或者一個以上的長度為k的重復字符串所連接成的,那麽這個字符串就叫做周期為k的串。   例如:   字符串’abcabcabcabc’周期為3,因為它是由4個循環’abc’組成的。它同樣是以6為周期(兩個重復的’abcabc’)和以12為周期(一個循環’abcabcabcabc’)。   右右現在想給他的朋友大灰狼轉述媽媽講的故事,請幫他寫一個程序,可以測定一個字符串的最小周期。

輸入格式

  一個最大長度為100的無空格的字符串。

輸出格式

  一個整數,表示輸入的字符串的最小周期。

樣例輸入

HaHaHa

樣例輸出

2

樣例輸入

Return0

樣例輸出

7

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner scanner = new Scanner(System.in);
 6         String s = scanner.nextLine();
7 char[] arr = s.toCharArray(); 8 int len = arr.length; 9 int ans = len,k; 10 for (int i = 0; i < len; i++) { 11 //最短是1,最長是len; 12 //周期肯定是總長度的整數倍 13 k = i+1; 14 if (k > len / 2) { 15 break; 16 }
17 else if (len % k!= 0) 18 continue; 19 int j; 20 //確認最短周期i成立 21 for (j = k; j < len; j++) { 22 if (arr[j % k] != arr[j]) 23 break; 24 } 25 if (j == len) { 26 ans = k; 27 break; 28 } 29 } 30 System.out.println(ans); 31 return ; 32 } 33 }

[藍橋] 算法提高 周期字串