黑马程序员技术交流社区

标题: 这道面试基础测试题有人给讲一下吗 [打印本页]

作者: 秦_奋    时间: 2014-12-10 21:05
标题: 这道面试基础测试题有人给讲一下吗
有没有大神教下下面这个程序怎么写:谢谢!
        编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
原始字符串是"abc",打印得到下列所有组合情况:
"a" "b" "c"
         "ab" "bc" "ca" "ba" "cb" "ac"
         "abc" "acb" "bac" "bca" "cab" "cba"


作者: 農邨尛夥兒    时间: 2014-12-10 21:42
坐等答案了  没头绪啊
作者: ben_vs_cong    时间: 2014-12-10 23:48
我也想知道,想了好久,都不知道怎么做

作者: 张周飞    时间: 2014-12-11 09:38
这是我做的 你可以参考下:
/**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 ? "对称" : "不对称"); //三元表达式输出结果
            }
}

作者: 郝明明    时间: 2014-12-11 09:41
同求啊!
作者: HelloWorld!    时间: 2014-12-11 09:48
仅供参考
  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. }
复制代码

作者: xingyunjunjun    时间: 2014-12-11 10:16
看不明白啊
作者: liuhao0324    时间: 2014-12-11 12:32
看看!!!
作者: 找寻小龙猫    时间: 2014-12-11 18:48
我只是才看了几天,代码还没想好不过思路是有了不知道可不可以
  1,  把abc分别存入LIst集合1,
  2,随机置换位置,通过循环,获取每次数据
  3,把每次的数据,遍历,获取一个元素,2个元素的组合,3个元素的组合,分别储存到另一个list 集合2中
  4,把list集合2中,重复元素去掉,
  5,当获取的任意元素与list集合2中的元素重复,则循环终止
  6.遍历集合2,得到想要的
作者: wez924612    时间: 2014-12-11 19:26
学习,学习!
作者: 蛋卷    时间: 2014-12-11 19:56
坐等大神解呀  菜鸟一枚呀
作者: 秦_奋    时间: 2014-12-11 20:24
HelloWorld! 发表于 2014-12-11 09:48
仅供参考

谢谢哥们了    虽然还是不太懂,但现在好像有思路了
作者: wzl963358694    时间: 2014-12-11 21:26
谢谢大神在此回复~~
作者: 壹贰叁    时间: 2014-12-11 21:37
本帖最后由 壹贰叁 于 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
  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. }
复制代码





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