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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦_奋 中级黑马   /  2014-12-10 21:05  /  1629 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有没有大神教下下面这个程序怎么写:谢谢!
        编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
原始字符串是"abc",打印得到下列所有组合情况:
"a" "b" "c"
         "ab" "bc" "ca" "ba" "cb" "ac"
         "abc" "acb" "bac" "bca" "cab" "cba"

点评

我用的递归做的,将字符串字符放到集合中,比如打印长度为一的字符串,直接循环取集合中数据。长度大于一时采取拼字符串的方式,先取集合中一个字符然后创建新的集合其中元素为上一个几个的子集合(去除被取元素),   发表于 2014-12-10 22:01

15 个回复

倒序浏览
坐等答案了  没头绪啊
回复 使用道具 举报
我也想知道,想了好久,都不知道怎么做
回复 使用道具 举报
这是我做的 你可以参考下:
/**aaa
* 1、判断一个字符串是否是对称字符串,
*                    例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
* @author Administrator
*
*/
public class Test1 {
         public static void main(String[] args) {
                boolean mrk = true;
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入一个字符串");
                String st = sc.next();
                int length = st.length();
                //判断前一半与后一半的是否相等
                for (int i = 0, j = length-1; i < length/2; i++, j--) {  
                    if(st.charAt(i) != st.charAt(j)) {
                        mrk = false;
                        break;  //退出循环
                    }
                }
                System.out.printf("%s", mrk==true ? "对称" : "不对称"); //三元表达式输出结果
            }
}
回复 使用道具 举报
同求啊!
回复 使用道具 举报
仅供参考
  1. package com.itheima;

  2. /*
  3. * 第6题:编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
  4. *         原始字符串是"abc",打印得到下列所有组合情况:
  5. *         "a" "b" "c" 
  6. *         "ab" "bc" "ca" "ba" "cb" "ac"
  7. *         "abc" "acb" "bac" "bca" "cab" "cba"
  8. * 分析:将字符串所有可能出现的排列组合的子串看做两部分:前缀和剩余部分。前缀不用修改,遍历并剩余部分,将
  9. * 剩余部分的每个字符切割拼接到前缀并打印,递归获取所有组合。若剩余部分长度为1,则不必切割,直接和前缀拼接。
  10. */
  11. public class Test6 {

  12.         public static void main(String[] args) {
  13.                 getAllSort("", "abc");
  14.         }
  15.         private static void getAllSort(String prefix, String strLeft) {
  16.                 //若剩余部分长度为1,则直接打印前缀和剩余部分拼接的结果
  17.                 if (strLeft.length() == 1) {
  18.                         System.out.println(prefix + strLeft);
  19.                         return;
  20.                 }
  21.                 //循环遍历字符串的剩余部分
  22.                 for (int i = 0; i < strLeft.length(); i++) {
  23.                         //定义字符串缓冲区方便对字符串的操作
  24.                         StringBuilder sb = new StringBuilder(strLeft);
  25.                         //获取前缀和剩余部分的每个字符拼接的新字符串并打印
  26.                         String str = prefix + strLeft.substring(i, i + 1);
  27.                         System.out.println(str);
  28.                         //将获取的新字符串作为前缀,去除字符串缓冲区中已拼接到前缀的字符后得到的字符串作为剩余部分,递归获取
  29.                         getAllSort(str, sb.deleteCharAt(i).toString());
  30.                 }
  31.         }
  32. }
复制代码
回复 使用道具 举报
看不明白啊
回复 使用道具 举报
看看!!!
回复 使用道具 举报
我只是才看了几天,代码还没想好不过思路是有了不知道可不可以
  1,  把abc分别存入LIst集合1,
  2,随机置换位置,通过循环,获取每次数据
  3,把每次的数据,遍历,获取一个元素,2个元素的组合,3个元素的组合,分别储存到另一个list 集合2中
  4,把list集合2中,重复元素去掉,
  5,当获取的任意元素与list集合2中的元素重复,则循环终止
  6.遍历集合2,得到想要的
回复 使用道具 举报
学习,学习!
回复 使用道具 举报
蛋卷 中级黑马 2014-12-11 19:56:28
11#
坐等大神解呀  菜鸟一枚呀
回复 使用道具 举报

谢谢哥们了    虽然还是不太懂,但现在好像有思路了
回复 使用道具 举报
谢谢大神在此回复~~
回复 使用道具 举报
本帖最后由 壹贰叁 于 2014-12-11 21:46 编辑
  1. package com.itheima;

  2. import java.awt.List;
  3. import java.util.ArrayList;

  4. /**
  5. * 第七题 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符
  6. 例如:
  7. 原始字符串是"abc",打印得到下列所有组合情况
  8. "a" "b" "c"
  9. "ab" "bc" "ca" "ba" "cb" "ac"
  10. "abc" "acb" "bac" "bca" "cab" "cba"
  11. */

  12. public class Test12 {
  13.         public static void main(String[] args){
  14.                 print("abd");
  15.         }
  16.        
  17.         //接收一个字符串输出,全部字符串组合情况
  18.         public static void print(String str){
  19.                 char[] ch = str.toCharArray();
  20.                 ArrayList<String> list1 = new ArrayList<String>();
  21.                 for(int i = 1; i <= ch.length; i++){
  22.                         list1 = getList(list1, i,ch);
  23.                         for(String s:list1){
  24.                                 System.out.print("\"" + s + "\" ");
  25.                         }
  26.                         System.out.println("");
  27.                 }
  28.         }
  29.        
  30.         //接收前一行的list集合,与下一行的长度,和字符串基本组合字符数组后,返回下一行list集合
  31.         public static ArrayList<String> getList(ArrayList<String> list,int len,char[] ch){
  32.                 ArrayList<String> newList  = new ArrayList<String>();
  33.                 if(list.size() == 0){
  34.                         for(int i = 0; i < ch.length; i++){
  35.                                 newList.add(ch[i]+"");
  36.                         }
  37.                         return newList;
  38.                 }
  39.                 for(String s:list){
  40.                         String str = s;       
  41.                                 for(int j = str.length();j < len ;j++){
  42.                                         for(int i = 0; i < ch.length; i++){
  43.                                                 if(str.indexOf(ch[i]) == -1){
  44.                                                         newList.add(str + ch[i]);
  45.                                                 }
  46.                                                
  47.                                         }
  48.                                 }
  49.                 }
  50.                 return newList.size() == 0 ? list:newList;
  51.         }

  52. }
复制代码

回复 使用道具 举报
rel4x 中级黑马 2014-12-12 10:07:38
15#
  1. public class test8 {

  2. public static void main(String[] args) {
  3.         String str = "abc";//输入字符
  4.          
  5.         List<String> strAss = new ArrayList<String>();//创建字符数组容器,利用角标遍历数组
  6.         for (int i = 0; i < str.length(); i++) {//
  7.             for (int j = i + 1; j <= str.length(); j++) {
  8.                 String sub = str.substring(i, j);//截取数据
  9.                  
  10.                 int r = 0;
  11.                 while (r++ < sub.length()) {//存储到ArrayList数组中前,先再次截取数组
  12.                     strAss.add(sub);//添加遍历的数组
  13.                     sub = sub.substring(1) + sub.substring(0, 1);//按照数组顺序截取 首位换位
  14.                 }
  15.             }
  16.         }
  17.          
  18.         for (String a : strAss) {//遍历出strAss数组的元素
  19.             System.out.println(a);
  20.         }
  21.     }
  22. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马