2017-08-05 4 views
0

は、ArrayListのか、LinkedListの中で次の点を考慮 [グロスターシャー州、ニューハンプシャー州、ヨークシャー、ランカシャー] シャイアは、長さ5 の最長共通接尾辞である出力は5 する必要がありますどのように私は上記を達成するための方法を書くことができますし、返却の長さ文字列のリストから最も長い共通サフィックスを見つけて、その結果のサフィックスの長さをjavaで返しますか?

+0

あなたは何をしようとしましたか? – Oleg

+0

最初にすべての文字列の最後の要素をチェックしてから最後に2番目のように –

+0

私は文字列のリストではなく2つの文字列で試しました。次のURLは役に立ちました。 https://stackoverflow.com/questions/33839443/how-to-find-common-suffix-in-java-by-using-method –

答えて

1

これを試してください。
説明は私がここでやっている何のコメント

package javaapplication1; 
public class SegmentTree { 

    public static void main(String[] args) { 
     String[] array = {"Gloucestershire", "Hampshire", "Yorkshire", "Lancashire"}; 
     int i,j; 
     int min=10000000; 

     //reversing the strings and finding the length of smallest string 
     for(i=0;i<(array.length);i++) 
     { 
      if(array[i].length()<min) 
       min=array[i].length(); 


     StringBuilder input1 = new StringBuilder(); 
     input1.append(array[i]); 
     array[i] = input1.reverse().toString(); 
     } 

     //finding the length of longest suffix 

     for(i=0;i<min;i++) 
     { 
      for(j=1;j<(array.length);j++) 
      { 
       if(array[j].charAt(i)!=array[j-1].charAt(i)) 
       { 
       break; 
       } 
      } 
      if(j!=array.length) 
       break; 
     } 

     System.out.println(i); 
    } 
} 

であるまず第二最後というように、すべての文字列の最後のelemをチェックし、あります。

時間計算:O(n個×m個)
N =文字列、数m =最小の文字列の長さ

+0

ありがとうございます。上記のコードはうまくいきます。 –

+0

@shriharis私の喜び –

0

グアバは、あなたのアルゴリズムで使用することができStrings.commonSuffix(CharSequence a, CharSequence b)と呼ばれるヘルパー関数を持っています。私はGuavaのような依存関係を追加することは、この機能が過度に働くことを知っていることを知っています - この場合、ソースコードを参照してhow this function is implementedを見て、この実装をあなたのプログラムに移すことができます。あなたのプログラムは次のようになります:

import com.google.common.base.Strings; 

import java.io.IOException; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

public class CommonSuffixLengthMain { 

    public static void main(String[] args) throws IOException { 

     assert 5 == commonSuffixLength(Arrays.asList("Gloucestershire", "Hampshire", "Yorkshire", "Lancashire")); 

     assert 2 == commonSuffixLength(Arrays.asList("abc", "dbc", "qebc", "webc")); 

     assert 0 == commonSuffixLength(Collections.emptyList()); 

     assert 0 == commonSuffixLength(Collections.singletonList("abc")); 

     assert 0 == commonSuffixLength(Arrays.asList("abc", "def", "zxc")); 
    } 

    private static int commonSuffixLength(final List<String> strings) { 
     int result = 0; 

     if (strings == null || strings.size() < 2) { 
      return result; 
     } 

     for (int i = 0; i < strings.size() - 1; i++) { 
      String prefix = Strings.commonSuffix(strings.get(i), strings.get(i + 1)); 
      result = result == 0 ? 
        prefix.length() : 
        Math.min(prefix.length(), result); 
     } 

     return result; 
    } 
} 
+0

これは、{'abc'、 'dbc'、 'qebc'、 'webc'}のために失敗します。 –

+0

@TanujYadavそれを指摘してくれてありがとう。このケースをサポートするための答えを編集しました。 –

関連する問題