2016-12-04 280 views
-4

如果有一種方法(java)知道字符串中重複出現的單詞,請讓我知道嗎?例如: 檢查此 字符串中的重複單詞「hihihi」,在這種情況下,重複的單詞是「hi」。java:如何知道字符串中的重複單詞?

串在這種情況下, 「hellohellohellohello 」的reapeated詞是「 你好」。

字符串 「feefee」 在這種情況下reapeated詞是 「」。

字符串 「AAAAAAAAAAAA」 在這種情況下reapeated詞是 「一個」。

認識到重複詞由1到6個字符組成。

最好的問候,瑪雅

+0

所以字符串只包含重複的單詞? – Keiwan

+0

也許這樣? https://en.wikipedia.org/wiki/Longest_common_substring_problem – rkosegi

+0

這是你的家庭作業嗎? – saman

回答

3

的算法很簡單:

  • 看看第一個字符重複整個字符串
  • 看看前兩個字符在整個字符串重複
  • 查看整個字符串中前三個字符是否重複
  • 查看前四個字符是否在整個字符串中重複
  • 看看前五個字符在整個字符串重複
  • 看看前六個字符在整個字符串重複

要查看是否字符i是從一個初始k字符重複字符字,使用

if (s.charAt(i) == s.charAt(i%k)) 

其中k是您正在檢查的單詞的長度。如果所有字母通過該測試的具體的k,並且該字符串的長度可被k(即s.length() % k == 0)整除,則字s由長度爲k的重複字組成。

+0

正如我在我的回答中所說的,先查找六個字符的重複,然後是較短的重複可能更有效。 – rossum

+0

@rossum正確性出現在效率之前:'AAAAAAAAAAAA'是一個單詞,其中'A'重複了12次,但如果首先檢查了'6'的長度,您會發現它包含兩個六個字母的單詞'AAAAAA '。 – dasblinkenlight

+0

謝謝你的回覆。在(AAAAAAAAAAAA)的情況下,當A重複12次時,重複的單詞應該是A不是6個字母的單詞AAAAAA,正如dasblinkenlight所說的 – maya

0

沒有內置的Java功能來做到這一點,所以你將不得不編寫自己的程序。

首先看看你的例子「hellohellohellohello」。 「hello」一詞重複出現,「hell」,「ello」,「hel」等詞彙也會重複出現。在課程中有一個問題的感覺,因此請向導師詢問只需要最長的單詞。

從找到最長的重複單詞開始,這個單詞將最多包含六個字符。嘗試一個六字重複的單詞。如果沒有一個,那麼尋找一個五個字符的重複單詞,等等,直到一個字符重複的單詞。從最長開始,您將避免浪費時間查找較短的單詞(如果不需要)。如果你的老師想要所有單詞,那麼你找到他們的順序並不重要。

這意味着您需要編寫一個方法來在字符串中查找n個字符的重複單詞,其中n是您傳入該方法的參數。首先集中寫這種方法。如果遇到問題,請再次詢問。

0

此代碼將解決您的問題。但這不是一般的。

public class MaxSubString { 
    private final static int MAX_SUB_STRING_LENGTH = 6; 

    public static void main(String [] args){ 
     System.out.println(maxSubString("hellohellohello")); // result is hello 
     System.out.println(maxSubString("helhelhel")); // result is hel 
     System.out.println(maxSubString("AAAAAAAAAAAAA")); // result is A 
     System.out.println(maxSubString("hehehehehehe")); // result is he 
    } 

    public static String maxSubString(String inputString){ 
     int maxSubStringLength = calculateMaxSubStringLength(inputString); 
     return inputString.substring(0,maxSubStringLength); 
    } 

    public static int calculateMaxSubStringLength(String inputString) { 
     int result = -1; 
     for(int i= MAX_SUB_STRING_LENGTH ; i>0 ; i--){ 
      if(inputString.length() < i *2) 
       continue; 
      if (inputString.substring(0,i).equals(inputString.substring(i , 2*i))) 
      result = i; 
     } 
     return result; 
    } 
} 
相關問題