2017-10-16 18 views
0

の「半ストリング」私は私はこのような特定の文字列のすべての部分文字列を取得することができます知っている:セットで私に次のような結果が得られますすべての部分文字列と文字列

String inputString = "abcde"; 

java.util.Set<String> substrings = new java.util.TreeSet<>(); 
int strLength = inputString.length(); 
for(int i=0; i<strLength; i++) 
    for(int j=0; j<=strLength-i; j++) 
    substrings.add(inputString.substring(i, i+j)); 

を:

a, ab, abc, abcd, abcde, b, bc, bcd, bcde, c, cd, cde, d, de, e, 

しかし、私は何とか代わりに以下のリストを取得したい:

a, ab, abc, abcd, abcde, abce, abd, abde, abe, ac, acd, acde, ace, ad, ade, ae, b, bc, bcd, bcde, bce, bd, bde, be, c, cd, cde, ce, d, de, e 

だから、すべての部分文字列に加えて、間に1つまたは複数の文字を削除すると、文字列が必要になります(つまり、 aceを削除することによってbおよびd)。

これを達成する最も簡単な方法は何ですか?

注:すべての文字は同じ順序のままでなければなりません。そうでなければ、文字列のすべての置換をそれらの文字列のすべての部分文字列と組み合わせます。

+0

を使用して1 char[i]削除4つの文字出力のための右の順

  • に手紙を取得*「しかし、私の代わりに、以下のリストの後ですか」? –

  • +0

    @NikolasCharalambidis私はそれを言い直しますが、私はそれが私が探している結果であることを意味しました。私はこれをどのように達成するのか分かりません。 –

    答えて

    1

    この解決策を確認してください。私のソフトウェアエンジニアリングクラスのインストラクターは、このソリューションを私たちに提供しました。 TreeSetで注文したセットを確実に受け取れるように少し編集しました。

    public static Set<String> stringSubsets(String str) { 
        if (str.isEmpty()) { 
         return new TreeSet<>(Arrays.asList("")); 
        } else { 
         char currentChar = str.charAt(0); 
         String rest = str.substring(1); 
    
         Set<String> combinationsOfRest = stringSubsets(rest); 
         Set<String> result = new TreeSet<>(); 
    
         result.addAll(combinationsOfRest); 
         for (String c: combinationsOfRest) 
          result.add(currentChar + c); 
    
         return result; 
        } 
    } 
    
    +0

    完璧なおかげで!私はできるだけ早くそれを答えとして受け入れます。 –

    0
      出力用 char[]
    1. にごinputStringを変更
    2. a,b,c,d,eをちょうどのような2つの文字の出力のために、簡単なfor loop
    3. char[i]を印刷:AB、ACなど - あなたのようなループでループを行いますしたので、char[i] + char [j]はあなたの部分文字列になるでしょう
    4. 3文字の出力 - 手順3のようなループでループしますが、この場合はchar[]配列char[i] and char[j]から削除しますOUあなたは*で何を意味するか、単純なループ
    関連する問題