您的位置:首页 > 其它

字符串的排列

2017-09-24 21:26 176 查看
题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

全排列算法:

可参见:

http://blog.csdn.net/randyjiawenjie/article/details/6313729

//Permutation
public class test {
//vital
ArrayList<String> re = new ArrayList<>();
public static void arrange(String[] str, int st, int len) {
if (st == len-1) {
for (int i = 0; i < len; i++) {
System.out.print(str[i]+" ");
}
System.out.println();
return;
}
else {
for (int i = st; i < len; i++) {
swap(str, st, i);
arrange(str, st+1, len);
swap(str, st, i);
}
}
}

private static void swap(String[] str, int i, int j) {
if (i != j) {
String tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}

}
public ArrayList<String> Permutation(String s) {
String[] str = new String[s.length()];
for (int i = 0; i < s.length(); i++) {
str[i] = s.substring(i, i+1);
}
arrange(str, 0, s.length());
return re;
}
//测试程序
public static void main(String[] args) {
String[] tmp = {"a", "a", "c"};
arrange(tmp, 0, 3);
}
}


本题需要,去重复字母

import java.util.*;
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
this.val = val;
}
}
public class Main {
public static ArrayList<String> Permutation(String str) {
ArrayList<String> list = new ArrayList<>();
if (str == null||str.length() == 0) return list;
HashSet<String> set = new HashSet<>();
change(set, 0, str.toCharArray());
list.addAll(set);
Collections.sort(list);
return list;
}
private static void change(HashSet<String> set, int k, char[] chars) {
if (k == chars.length) {
set.add(new String(chars));
return;
} else {
for (int i = k; i < chars.length; i++) {
swap(chars, k, i);
change(set, k+1, chars);
swap(chars, k, i);
}
}
}

private static void swap(char[] chars, int i, int j) {
if (i != j) {
char tmp = chars[i];
chars[i] = chars[j];
chars[j] = tmp;
}
}
//测试
public static void main(String[] args) {
ArrayList<String> strings = Permutation("abc");
for (String s:strings) {
System.out.println(s);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: