A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹晓涵 中级黑马   /  2012-9-16 19:58  /  1714 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 题目:用户给一个字符串例如"abcc",对此字符串消重,后求所有子串(例如本题的解是a/b/c/ab/ac/ba/ca/bc/cb/abc/...)
  3. 今天做了一套学校题库中的题,以前定义一个新的字符串,用的逐个比较法判断是否存在消重,双重循环打印所有子集,非常麻烦。
  4. 看了正则和API候发现居然有现成的方法。请问此题还有其他更好的解法么。
  5. */
  6. import java.util.*;
  7. class GetSubStr
  8. {       
  9.         public static void main(String [] args)
  10.         {               
  11.                 System.out.println(getSubSequences(eliminatingDuplicate()));
  12.         }
  13.         //正则表达式给字符串消重复
  14.         public static String eliminatingDuplicate()
  15.         {
  16.                 String str = "abcc";
  17.                 str = str.replaceAll("(.)\\1+","$1");
  18.                 return str;
  19.         }
  20.         //获取字符串的所有非空子串
  21.         public static ArrayList<String> getSubSequences(String strings) {
  22.                 ArrayList<String> list = new ArrayList<String>();
  23.                 doGetSubSequences(strings, "", list);
  24.                 //消除空字符串
  25.                 list.remove("");
  26.                 //对集合进行排序
  27.                 Collections.sort(list);
  28.                 return list;
  29.         }
  30.         //获取字符串的所有子集含空集和自身
  31.         private static void doGetSubSequences(String strings, String splits,
  32.                         ArrayList<String> list) {
  33.                 if (strings.length() == 0) {
  34.                         list.add(splits);
  35.                         return;
  36.                 }               
  37.                 String tail = strings.substring(1);
  38.                 doGetSubSequences(tail, splits, list);
  39.                 doGetSubSequences(tail, splits + strings.charAt(0), list);
  40.         }
  41. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马