黑马程序员技术交流社区

标题: 那个大神,帮我分析下这道题该怎么做 [打印本页]

作者: wufengqiao    时间: 2016-4-29 23:04
标题: 那个大神,帮我分析下这道题该怎么做
分析以下需求,并用代码实现:
        (1)打印一个字符串的全字符组合情况,原始字符串中没有重复字符
        (2)例如:原始字符串是"def", 打印得到下列所有组合情况:
                "d" "e" "f" "de" "df" "ed" "ef" "fd" "fe" "def" "dfe" "edf" "efd" "fde" "fed"
作者: ufoheima    时间: 2016-5-1 00:37
我擦 --  这个是我们今天的作业题  我 也  不会--
作者: yaolv7    时间: 2016-5-1 12:10
每个字符往集合里存,再遍历集合里的字符对象,如果集合里的字符对象不包含当前遍历到的集合对象,就相加,然后再加到集合里,你可以先想一下,再看代码









  1. private static void method(String string) {
  2.                 LinkedHashSet<String> lhs = new LinkedHashSet<String>();
  3.                         // 往集合里存一个空串用于第一次遍历集合
  4.                 lhs.add("");
  5.                
  6.                 for (int i = 0; i < string.length(); i++) {
  7.                         for (int j = 0; j < string.length(); j++) {
  8.                                         // 截取字符串中的一个字符
  9.                                 String srt = string.substring(j, j + 1);
  10.                                         // 创建一个集合
  11.                                 LinkedHashSet<String> tempLhs = new LinkedHashSet<String>();
  12.                                         // 遍历lhs集合
  13.                                 for (String s : lhs) {
  14.                                                 // 若遍历当前对象里不包含当前srt字符串,则把srt添加到字符串中
  15.                                         if (! s.contains(srt)) {
  16.                                                 s = s + srt;
  17.                                         }
  18.                                                 // 把添加后的字符串存到tempLhs集合
  19.                                         tempLhs.add(s);
  20.                                 }
  21.                                         // 把tempLhs集合里的元素全部添加到lhs集合
  22.                                 lhs.addAll(tempLhs);
  23.                         }
  24.                 }
  25.                         // 删除集合里的空串
  26.                 lhs.remove("");
  27.                
  28.                         // 创建一个TreeSet集合,自定义一个比较器
  29.                 TreeSet<String> ts = new TreeSet<String>(new Comparator<String>() {
  30.                         @Override
  31.                         public int compare(String o1, String o2) {
  32.                                         // 比较字符串长度为主要条件,字符串字典顺序为次要条件
  33.                                 int i = o1.length() - o2.length();
  34.                                 int j = o1.compareTo(o2);
  35.                                 return i == 0 ? j : i;
  36.                         }
  37.                        
  38.                 } );
  39.                         // 添加lhs集合里的所有元素到ts集合,排序
  40.                 ts.addAll(lhs);
  41.                 for (String s : ts) {
  42.                         System.out.println(s);
  43.                 }
  44.         }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2