2012-01-01 5 views
1

提供された単語からすべての部分文字列を表示するために、次のforループを記述しました。しかし、requriementの1つは、1つの単語がユニークな部分文字列のみを表示するということです。 'mom'が次のコードに与えていたら、長さ1の部分文字列を 'm'、 'o'、 'm'として表示し、 'm'の複製を与えます。固有の部分文字列だけが印刷されていることを確認するにはどうしますか?Java - すべての一意のサブリングを表示するForループ

public static void allUniqueSubStrings(String str) { 
    for (int i = 1; i <= str.length(); i++) { 
     for (int j = 0; j + i <= str.length(); j++) { 
      String s = str.substring(j, i+j); 
      System.out.println(s); 
     } 
    } 
} 
+0

おそらく宿題ですか? – bmargulies

答えて

1

次のコードを試してください。それはあなたの要求に従って動作するはずです。

import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.Scanner; 

final public class Main 
{ 
    public static void main(String...args) 
    { 
     String string, sub; 
     ArrayList<String>al=new ArrayList<String>(); 

     int i, c, length; 

     Scanner in = new Scanner(System.in); 
     System.out.print("Enter a string to print it's all unique substrings:->"); 
     string = in.nextLine(); 

     length = string.length(); 

     System.out.print("Substrings of \""+string+"\" are :->"); 

     for(c=0;c<length;c++) 
     { 
      for(i=1;i<=length-c;i++) 
      { 
       sub = string.substring(c,c+i); 
       al.add(sub); 
      } 
     } 

     HashSet hs = new HashSet(); 
     hs.addAll(al); 
     al.clear(); 
     al.addAll(hs); 

     for(String str:al) 
     { 
      System.out.println(str); 
     } 
    } 
} 

重複要素を削除する最も簡単な方法は、重複を許可した後、我々は直接のArrayListを使用せずにそれを行うことができますArrayList

1

あなたがすでに見たものを覚えておくためにセットを使用してください。長さnの任意の文字列に対して、およそ(n^2)/ 2の部分文字列を持つので、Setのサイズはそのように限定されます。

0

に戻って設定を追加しませんSetにコンテンツを追加することですそれはあなたが受け入れる上記の答えを混乱させる。私のコードを確認する。

public class Subst { 
    public static void main(String args[]) { 
     String st; 
     HashSet<String> hs = new HashSet<String>(); 
     Scanner in = new Scanner(System.in); 
     st = in.nextLine(); 
     int length = st.length(); 
     for (int i = 0; i < length; i++) { 
      for (int j = i + 1; j <= length; j++) { 
       hs.add(st.substring(i, j)); 
      } 
     } 
     System.out.println(hs); 
    } 
} 
+0

試してみてください........... :) –

関連する問題