黑马程序员技术交流社区

标题: 关于获取一个字符串的不重复字符组合情况 [打印本页]

作者: 突然世界晴    时间: 2015-4-21 14:47
标题: 关于获取一个字符串的不重复字符组合情况
  1. *原始字符串是"abc",打印得到下列所有组合情况:
  2. *"a" "b" "c"
  3. *"ab" "bc" "ca" "ba" "cb" "ac"
  4. *"abc" "acb" "bac" "bca" "cab" "cba"
  5. *
  6. */
  7. public class Test35 {
  8. public static void main(String[] args) {
  9.          String str="abc";
  10.          //hashSet去重复
  11.          HashSet<String> hs=new HashSet<String>();
  12.          for(int i=0;i<str.length();i++)
  13.          {
  14.                
  15.                  StringBuilder sb =new StringBuilder();
  16.                  //StringBuilder对象 添加字符串
  17.                  sb.append(str.charAt(i));
  18.                  //集合添加 这里添加 a b c三个元素
  19.                  hs.add(str.charAt(i)+"");
  20.                  
  21.                  System.out.print(str.charAt(i)+",");
  22.                  for (int y = 0; y < str.length(); y++) {
  23.                          //这里三次循环 第一次为 a ,第二次b 第三次 c
  24.                          StringBuilder sb1=sb;
  25.                          //判断 sb1里面是否包括该字符,不包括则添加
  26.                          if(!sb1.toString().contains(str.charAt(y)+""))
  27.                          {
  28.                          //添加不包括的字符
  29.                          sb1=sb.append(str.charAt(y));
  30.                          //集合添加,
  31.                          hs.add(sb1.toString());
  32.                          System.out.print(sb1.toString()+",");       
  33.                          }
  34.                                           
  35.                 }
  36.                  //反向在添加一次
  37.                  for (int z = str.length()-1; z >= 0; z--) {
  38.                          StringBuilder sb2=sb;
  39.                          if(!sb2.toString().contains(str.charAt(z)+""))
  40.                          {
  41.                          sb2=sb.append(str.charAt(z));
  42.                          hs.add(sb2.toString());
  43.                          System.out.print(sb2.toString()+",");       
  44.                          }
  45.                                           
  46.                 }
  47.          }
  48.          System.out.println(hs);
  49. }
  50. }
复制代码


一个大for为什么嵌套的两个for 只能添加一个for里面的, 不注释则输出和注释第二个相同。注释掉第1个 则相反。
解决的办法只能是生成两个大for 每个for里面 放一个for
作者: 突然世界晴    时间: 2015-4-21 14:49
为什么会出现这种情况,一个for不能全部添加
作者: itheima_llt    时间: 2015-4-21 20:19
不错,顶的人不多啊,快点继续
作者: itheima_llt    时间: 2015-4-21 22:01
必须得顶呀!
作者: itheima_llt    时间: 2015-4-21 23:30
大家看怎么样 我认为很好.




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