2011-10-22 10 views
0

文字列をメソッドに渡したいとします。 "abbcccdef"とそれが最長部分文字列を返すようにします。この場合は「ccc」になります。誰かがこの問題を解決するのに役立つコードを教えてください。私は初心者が簡単に理解できるようにするための基本的なことをしたいと思います。これは私がこれまで持っているものですが、動作するように見えるdoesntの: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

私はこれをテストしていないと私が見つけたと、すでに1つのエラーを修正し、私は私がすべてカバーしたと思います今の基地。あなたが質問で詳しく述べていない1つの制限は、等しい、最長の2つの部分文字列がある場合です。すなわち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

ありがとうございます。私はそのシナリオも考えました。等しい部分文字列を2つの異なる部分文字列として返すにはどうすればよいでしょうか?もう一度おねがいします – 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

関連する問題