字符串的全排列JAVA实现

package com.kpp;

/**
 * 求字符串的全排列
 * 递归的思想
 * 比如  abcde  先求出abcd的全排列,然后将e分别插入全排列的5个位置
 * a 全排列  a
 * ab 全排列  ab ba
 * abd 全排列即是  cab acb abc cba bca bac
 *
 * @author kpp
 *
 */
public class QuanPaiLie {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "abcde";

        //System.out.println(str.substring(0, 2));
        String[] rs = getQuanPaiLie(str);
        if(rs != null){
            int count = 0;
            for(int i = 0;i < rs.length;i++){
                if(rs[i]!=null){
                    System.out.println(rs[i]);
                    count++;
                }

            }
            System.out.println("count: "+count);
        }

    }
    /**
     * 求一个字符串的全排列
     * @param str
     * @return
     */
    public static String[] getQuanPaiLie(String str){
        String[] rs = new String[1000];

        if(str == null||str.isEmpty()){
            return null;
        }
        int strLen = str.length();
        if(strLen == 1){
            rs[0] = str;

        }else if(strLen == 2){
            rs[0] = str;
            rs[1] = ""+str.charAt(1)+str.charAt(0);

        }else if(strLen > 2){
            char c = str.charAt(strLen-1);
            String strBefore = str.substring(0,strLen-1);
            String[] tmpRsArr = getQuanPaiLie(strBefore);
            int count = 0;
            for(int i = 0;i < tmpRsArr.length;i++){

                String tmpRs = tmpRsArr[i];
                if(tmpRs != null){
                    for(int k = 0;k < tmpRs.length()+1;k++){
                        rs[count++] = tmpRs.substring(0,k)+c+tmpRs.substring(k,tmpRs.length());
                    }
                }

            }

        }

        return rs;
    }

}
时间: 2024-11-10 01:10:23

字符串的全排列JAVA实现的相关文章

字符串的全排列(java)

差不多半个月没写博客了,今天再写一篇. 字符串全排列相信大家都不陌生,对于我来说真的是写了又忘,忘了又写,所以决定写成一篇博客,废话不多说下面我来分析问题: 问题描述:给定一个字符串写出它的全排列,例如ab,全排列是ab,ba,而abc的全排列abc,acb,bac,bca,cab,cba. 解题思路:我们以具体例子分析,假如abc,如上所示,它的全排列是不是就是把字符串中每一个字符,放在第一位,然后再对剩下的字符串做全排列,如把a放在第一位,剩下bc 全排列是bc,cb,组合起来就是abc,a

含重复字符的字符串的全排列问题(Java)

本代码既可以输出重复和不重复字符串的全排列 /** * 含重复字符的字符串的全排列问题 * * */ public class S_28 { public static int count = 0; public static void main(String[] args){ char[] list = {'a','b','c'}; char[] list1 = {'a','b','b'}; //permutation(list); permutation(list1); System.out

字符串数组全排列——逐个追加组合算法

我们在笔试面试过程中经常会遇到关于排列与组合的问题,其实这些可以通过递归简单的实现,看下面两个例子: (1)关于字符串排列的问题 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则输出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 可以这样想:固定第一个字符a,求后面两个字符bc的排列.当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac;接着我们固定第一个字符b,求后面两个字符ac的排列.现在是把c放到第一位

搜索文件或目录中包含字符串的文件 java小程序

package com.ruishenh.spring.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Enumeration; import java.

28. 字符串的全排列之第2篇[string permutation with repeating chars]

[本文链接] http://www.cnblogs.com/hellogiser/p/string-permutation-with-repeating-chars.html [题目] 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则输出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba.例如输入字符串aba,则输出由字符a.b所能排列出来的所有字符串aab.aba.baa. [分析] 之前的博文28.字符串的排列之第1篇[String

字符串转换成java.util.date类型和将java.util.date类型转换成java.sql.date类型

//将字符串转换成java.util.date类型 DateFormat format = new SimpleDateFormat("yyyyMMDD"); Date date1 = format.parse(startDate); //将java.util.date类型转换成java.sql.date类型 skg.statStartTime = new java.sql.Date(date1.getTime()); skg.statEndTime = new java.sql.Da

7 种将字符串反转的 Java 方法

import java.util.Stack;public class StringReverse { public static String reverse1(String s) { int length = s.length(); if (length <= 1) return s; String left = s.substring(0, length / 2); String right = s.substring(length / 2, length); return reverse

编程算法 - 字符串相同 代码(Java)

字符串相同 代码(Java) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 实现一个算法, 确定一个字符串的所有字符是否全都不同. 假使不允许使用额外的数据结构, 又该如何处理. 解法1: 使用数据结构, 设置boolean数组, 把值(value)作为数组的索引(index), 判断数组是否重复. 解法2: 不使用数据结构, 可以通过位(bit)进行判断, 把每个字母映射2进制数的一位, 或运算("|")更新数字的位, 与运算("

显示字符串的全排列

显示字符串的全排列: 1 public static void AllSequenceofString(String string){ 2 if(string == null) 3 return; 4 char[] chars = string.toCharArray(); 5 Permutation(chars,0); 6 } 7 private static void Permutation(char[] chars, int index) { 8 // TODO Auto-generate