2011-10-22 86 views
0

我想將字符串傳遞到方法中,例如「abbcccdef」並希望它返回最長的子字符串。在這種情況下,它將是「ccc」。有人請幫我解決這個問題的代碼。我想要一些基本的東西,讓初學者很容易理解。這是我迄今爲止,但它似乎沒有工作:從Java中傳遞的字符串中獲取最長的子字符串

非常感謝

public String getLongestSubstring(String s) { 

     int [] length = new int [s.length()]; 
     String longestString = ""; 
     if (s.length() > 0) { 
      char c = s.charAt(0); 
      for (int i=0;i<s.length();i++) { 
       for (int j=0;j<s.length();j++) { 
        if (c==s.charAt(j)) { 
         length [i]++; 
        } else { 
         c = s.charAt(j); 
         i++; 
        } 
       } 

      } 
      return longestString; 
     } 
     else 
     return null; 

    } 
+0

'似乎並沒有工作'?它有什麼作用?你用過調試器嗎?幾個戰略印刷報表? – bmargulies

回答

1

我沒有測試過這一點,我發現已經固定一個錯誤,但我想我已經涵蓋了所有現在的基地。你在你的問題中沒有詳細說明的一個侷限是有兩個長度相等,最長的子串。即abbbcccdef,我只是返回第一個。

public String getLongestSubstring(String s) 
{ 
    if (s.length() == 0) return null; 

    //We need some data to start with. 
    char currentChar = s.charAt(0); 
    String longestString = "" + currentChar; 
    String runningString = "" + currentChar; 
    int currentLongestLength = 1; 

    for (int i = 1; i < s.length(); i++) 
    { 
     //Check the current char, is it the same? 
     if (s.charAt(i) == currentChar) 
     { 
      runningString = runningString + currentChar; 
      //Have we beaten our previous record. 
      if (runningString.length() > longestString.length()) 
      { 
       //Increase the record. 
       currentLongestLength++; 
       longestString = runningString; 
      } 
     } 
     else 
     { 
      runningString = "" + s.charAt(i); 
     } 
    } 
    return longestString; 
} 
+0

非常感謝。我也想到了這種情況。如果我想將兩個相同的子字符串作爲兩個不同的子字符串返回,我需要做什麼?再次感謝 – Iffy

+0

我可能會創建一個Map 的映射,其中string是子串,Integer是這些串的長度,找到這些長度的最大值。然後返回長度等於max的字符串數組。 –

+0

請不要忘記標記我的答案是正確的,如果是的話! =] –

0
public String getLongestSubString(String source) { 

    StringBuilder longestStringBuilder = new StringBuilder(source.length()); 
    String longestString = ""; 

    for(int i=0; i<source.length(); i++) { 

     if(longestStringBuilder.toString().contains(String.valueOf(source.charAt(i)))) { 

      if(longestString.length() < longestStringBuilder.toString().length()) { 
       longestString = longestStringBuilder.toString(); 
      } 

      longestStringBuilder.setLength(0); 
     } 

     longestStringBuilder.append(source.charAt(i)); 

    } 

    if(longestString.length() < longestStringBuilder.toString().length()) { 
     longestString = longestStringBuilder.toString(); 
    } 

    return longestString; 
} 
1

這裏是我是如何實現找到從字符串中最長的串。

public class LongestString {  

    public static void main (String[] args) throws java.lang.Exception { 
     System.out.println("Longest Substring is " + getLongestSubstring("abbcccdf")); 
    } 

    public static String getLongestSubstring(String s) { 
      int length = 1; 

     String longestString = ""; 

     for (int i = 0; i < s.length(); i++) { 
      StringBuilder str = new StringBuilder(); 
      str.append(s.charAt(i)); 

      for (int j = i + 1; j < s.length(); j++) { 
       if (s.charAt(i) == s.charAt(j)) { 
        str.append(s.charAt(j)); 
       } else { 
        break; 
       } 
      } 
      if (length < str.length()) { 
       length = str.length(); 
       longestString = str.toString(); 
      } 

     } 
     return longestString; 
    } 
} 

測試:http://ideone.com/JM904Y

相關問題