字符串的排列
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
本题需要,去重复字母
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串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); } } }
相关文章推荐
- 字符串排列
- 如何让字符串按顺序排列?(模拟手机中联系人按字母\排列)
- 字符串的排列组合
- java算法字符串全排列
- 剑指offer——面试题28:字符串的排列(递归)
- 字符串的全排列:看似繁杂,递归则简。
- 剑指Offer——字符串的排列
- 字符串的排列
- 面试题28:字符串全排列
- 字符串的全排列和组合算法
- 递归实现 参数字符串中的字符反向排列
- 将一个字符串逆序排列
- 编程题—字符串的排列
- 字符串的排列
- 字符串排列与八皇后问题
- 【转帖】字符串的排列
- 编写一个函数reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。
- 已知一个有重复字符的字符串,打印其所有不同的字符排列
- 字符串全排列算法
- 《剑指Offer》面试题28:字符串的排列