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 不能正常工作。第二个循环绑定需要是 <= 而不仅仅是 <。

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 回答