0

文字列に対してすべての部分文字列を計算するライブラリ関数があるかどうか(またはApache CommonsのStringUtilsにそれがないのはなぜですか?)「abcde」の場合は、「a」、「ab」、「b」、「abc」、「bc」、「c」、「abcd」、「bcd」、「cd」、「d」、「abcde」、 「bcde」、「cde」、「de」、「e」。

4

5 に答える 5

3

ライブラリ関数があるとは思いませんが、自分でロールするのは非常に簡単です。

public ArrayList<String> getAllSubstrings(String s)
{
   ArrayList<String> toReturn = new ArrayList<String>();
   for (int i = 0; i < s.length(); i++)
      for (int j = i + 1; j < s.length(); j++)
         toReturn.add(s.substring(i, j));
}

ただし、1+2+3+4+...+s.length に等しい順列の数があることを覚えておいてください。

于 2011-03-06T00:45:51.960 に答える
1

AndyPerfect が正しく動作するとは思いません。2 番目のループ バウンドは、< ではなく <= である必要があります。

public static ArrayList<String> getPowerSet(String original) {
       ArrayList<String> toReturn = new ArrayList<String>();

       toReturn.add("");

       for (int i = 0; i < original.length(); i++) {
          for (int j = i + 1; j <= original.length(); j++) {
             toReturn.add(original.substring(i, j));
          }
       }

       return toReturn;
    }

空の部分文字列を含めたくない場合は、最初の add() を削除できることに注意してください。

于 2011-03-06T01:37:11.693 に答える
0

計算集約的に聞こえます。あなたが全文で持つであろうすべての順列を考えてください。

それと彼らはおそらく、誰かが定期的に必要とされていない何かを必要としているかどうかを考えました。

于 2011-03-06T00:42:34.423 に答える
0

public static ArrayList getPowerSet(String original) { ArrayList toReturn = new ArrayList();

   toReturn.add("");

   for (int i = 0; i < original.length(); i++) {
      for (int j = i + 1; j <= original.length(); j++) {
         toReturn.add(original.substring(i, j));
      }
   }

   return toReturn;
}
于 2014-02-19T08:25:22.390 に答える
0
public static ArrayList<String> getPowerSet(String original) {
       ArrayList<String> toReturn = new ArrayList<String>();

       toReturn.add("");

       for (int k = 0; k < original.length(); k++) {
          for (int j = k + 1; j <= original.length(); j++) {
             toReturn.add(original.substring(k, j));
          }
       }

       return toReturn;
    }
于 2014-02-19T08:29:43.650 に答える