- /*
- 题目:用户给一个字符串例如"abcc",对此字符串消重,后求所有子串(例如本题的解是a/b/c/ab/ac/ba/ca/bc/cb/abc/...)
- 今天做了一套学校题库中的题,以前定义一个新的字符串,用的逐个比较法判断是否存在消重,双重循环打印所有子集,非常麻烦。
- 看了正则和API候发现居然有现成的方法。请问此题还有其他更好的解法么。
- */
- import java.util.*;
- class GetSubStr
- {
- public static void main(String [] args)
- {
- System.out.println(getSubSequences(eliminatingDuplicate()));
- }
- //正则表达式给字符串消重复
- public static String eliminatingDuplicate()
- {
- String str = "abcc";
- str = str.replaceAll("(.)\\1+","$1");
- return str;
- }
- //获取字符串的所有非空子串
- public static ArrayList<String> getSubSequences(String strings) {
- ArrayList<String> list = new ArrayList<String>();
- doGetSubSequences(strings, "", list);
- //消除空字符串
- list.remove("");
- //对集合进行排序
- Collections.sort(list);
- return list;
- }
- //获取字符串的所有子集含空集和自身
- private static void doGetSubSequences(String strings, String splits,
- ArrayList<String> list) {
- if (strings.length() == 0) {
- list.add(splits);
- return;
- }
- String tail = strings.substring(1);
- doGetSubSequences(tail, splits, list);
- doGetSubSequences(tail, splits + strings.charAt(0), list);
- }
- }
复制代码 |
|