给定一个字符串,找出其所有不重复的排列组合

给一个字符串,比如ABC, 把所有的排列,即:ABC, ACB, BAC, BCA, CAB, CBC 都找出来。

  解题思路:

  对于一个n 位的字符串来讲,它是n-1位字符串的排列 加上 没有在 n -1 位字符串里 那个字符 的排列。 
  比如:

  对于字符串ABC来讲,它所有的排列就是 A + BC 的排列 加上 B + AC 的排列,再加上 C + AB的排列。

而BC的排列是 B + C 的排列 加上 C + B 的排列。所以,对一个字符串,我们从中去一个值,然后求剩余部分的排列,然后把它们再组合在一起。代码如下:

package permutation;

import java.util.LinkedList;
import java.util.Scanner;

/**
 * 排列组合一个字符串
 * 给一个字符串,比如ABC, 把所有的排列,即:ABC, ACB, BAC, BCA, CAB, CBC 都找出来。
 * 解题思路:
 * 对于一个n 位的字符串来讲,它是n-1位字符串的排列 加上 没有在 n -1 位字符串里 那个字符 的排列。 
 * 比如:
 * 对于字符串ABC来讲,它所有的排列就是 A + BC 的排列 加上 B + AC 的排列,再加上 C + AB的排列。
 * 而BC的排列是 B + C 的排列 加上 C + B 的排列。
 * 所以,对一个字符串,我们从中去一个值,然后求剩余部分的排列,然后把它们再组合在一起。
 * @author Administrator
 *
 */
public class PermutationString
{
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())
		{
			LinkedList list=permutation(sc.next());
			System.out.println(list);
		}
	}
	
	private static LinkedList permutation(String str)
	{
		LinkedList permuList=new LinkedList();
		
		//递归出口,当只有字符串只包含一个字符的时候
		if(str.length()<=1)
		{
			permuList.add(str);
			return permuList;
		}
		
		for(int i=0;i0&&ch==str.charAt(i-1))
				continue;
			
			//接下来获取不包含该字符的n-1位字符构成的字符串
			String newStr=getSubString(str,i);
			//递归调用,直到newStr中只包含一个字符时
			LinkedList newPermuList=permutation(newStr);
			for(int j=0;j


参考文章:http://blog.csdn.net/beiyeqingteng/article/details/7051942


你可能感兴趣的:(算法)