字符串全排列,并去重。

public class TestB {

	public static void permutation(String str,Set set){
		if(str==null) return;
		int len=str.length();
		if(len==0 || len==1)return;
		 permutation(str.toCharArray(), 0,set);

	}

	private static void permutation(char[] str, int i, Set set) {
		 if (i >= str.length)
	            return;
	        if (i == str.length - 1) {
	        //    System.out.println(String.valueOf(str));
	            set.add(String.valueOf(str));
	        } else {
	            for (int j = i; j < str.length; j++) {
	                char temp = str[j];
	                str[j] = str[i];
	                str[i] = temp;

	                permutation(str, i + 1,set);

	                temp = str[j];
	                str[j] = str[i];
	                str[i] = temp;
	            }
	        }

	}

	public static void main(String[] args) {
		   Set<String>set=new HashSet<>();
		   permutation("acda",set);
		   for(String s:set){
			   System.out.println(s);
		   }

	}

}

  

时间: 2024-11-08 05:03:25

字符串全排列,并去重。的相关文章

java 字符串全排列 和 去重

用递归进行排序 , 用TreeSet 去重. public class test { public static void main(String []args){ String str = "AVCV"; TreeSet set = new TreeSet(); List list = digui(str); System.out.println(list.size()); for(Object o :list){ set.add(o.toString()); } } public

字符串全排列 java实现

经常会遇到字符串全排列的问题.例如:输入为{'a','b','c'},则其全排列组合为abc,acb,bac,bca,cba,cab.对于输入长度为n的字符串数组,全排列组合为n!种. package Bayes; public class RecursionTree { public static void permutation(char[] s,int from,int to) { if(to<=1) { return; } if(from ==to) { System.out.print

PHP字符串全排列算法

<?php /** * PHP字符串全排列算法 */ $results = []; $arr = []; function bfs($start) { global $arr; global $results; $queue = []; array_push($queue, $start); while( !empty($queue) ) { $cur = array_shift($queue); if(strlen($cur) === count($arr)) { array_push($re

字符串全排列和组合算法

打印字符串的全排列 算法的思路: 把一个字符串分成两部分,第一个字符+后面部分所有的字符.这样就能够递归的求解整个过程了: 1.每个字符都做一次首字符 2.当某个字符作为首字符的时候,求后面所有字符的全排列 而这里的求后面所有字符的全排列可以看成递归的子问题 全排列的递归树: 但是这里还有一个问题,那就是字符串中有重复的字符时,这样的算法会增加最后的结果数目.比如说字符串aab,a+ab的全排列,然后交换还是a+ab的全排列.所以会增加结果的数目.解决方案就是:当遇到重复的字符的时候就跳过去,不

字符串全排列-非递归算法

字符串的全排列非递归算法是每次都寻找比前序列大一点的序列,如: 起点:字典序最小的排列,例如12345 终点:字典序最大的排列,例如54321 过程:从当前排列生成字典序刚好比它大的下一个排列. 算法过程:后找.小大.交换.翻转 后找:字符串中最后一个升序的位置i,即S[k]>S[k+1](k>i),S[i]<S[i+1]: 查找(小大):S[i+1...N-1]中比Ai大的最小值Sj: 交换:Si,Sj: 翻转:S[i+1...N-1] 代码如下: 1 #include <ios

递归写出字符串全排列

给出一个字符串,例如“abc”,输出它的全排列及“abc”,"acb","bac","bca","cab","cba". 递归的方法: 核心思想:交换. 全排列(“abc”)=a.全排列(“bc”)+b.全排列("ac")+c.全排列(“ab”),其中a.全排列(“bc”)=ab.全排列(“c”)+ac.全排列(“b”)=abc+acb void swap(char *p, char *

字符串全排列问题

问题:输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. 解决思路:第一遍将第一个字母固定,遍历所有字母,与第一个字母交换位置,然后固定下一个字母,与其后的所有字母依次交换位置,直到固定最后一个字母. 字符串的全排列是一个概率问题,排除相同字母造成的影响,比如abc的全排列个数为A33 = 6

有重复字符串全排列

题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. import java.util.*; public class Solution { public static ArrayList<String> Permutation(String str) { if(str == null) return null; ArrayList<String> l

获取字符串全排列 或者 只输出k个的组合

已知长度为n的字符串,获取所有可能的全排序 n! def test(arr): length = len(arr) if length<=1: return arr res = [] for i in range(length): temp = list.copy(arr) del(temp[i]) res += [arr[i]+j for j in test(temp)] return res print(test(['a','b','c','d'])) result: G:\python\s