算法笔记_222:串中取3个不重复字母(Java)
2017-05-23 13:01
363 查看
1 问题描述
从标准输入读入一个由字母构成的串(不大于30个字符)。从该串中取出3个不重复的字符,求所有的取法。
取出的字符,要求按字母升序排列成一个串。
不同的取法输出顺序可以不考虑。
例如:
输入:
abc
则输出:
abc
输入:
abcd
则输出:
abc
abd
acd
bcd
输入:
abcaa
则输出:
abc
2 解决方案
import java.util.ArrayList; import java.util.Collections; import java.util.Scanner; public class Main { public static ArrayList<Character> list = new ArrayList<Character>(); public static ArrayList<String> set = new ArrayList<String>(); public void dfs(int step, int now, int[] B) { if(step == 3) { StringBuffer s = new StringBuffer(""); s.append(list.get(B[0])); s.append(list.get(B[1])); s.append(list.get(B[2])); if(!set.contains(s.toString())) set.add(s.toString()); return; } else { for(int i = now + 1;i < list.size();i++) { B[step] = i; dfs(step + 1, i, B); } } } public void getResult(String A) { char[] arrayA = A.toCharArray(); for(int i = 0;i < arrayA.length;i++) if(!list.contains(arrayA[i])) list.add(arrayA[i]); Collections.sort(list); int[] B = new int[3]; dfs(0, -1, B); for(int i = 0;i < set.size();i++) System.out.println(set.get(i)); } public static void main(String[] args) { Main test = new Main(); Scanner in = new Scanner(System.in); String A = in.nextLine(); test.getResult(A); } }
[b]运行结果:[/b]
123454321 123 124 125 134 135 145 234 235 245 345
相关文章推荐
- 算法笔记_231:网格中移动字母(Java)
- [置顶] 算法笔记 //05_有重复元素的排列问题(针对字母排序)
- Java学习笔记---实现两个ArrayList合并,并去掉重复数据的算法
- 算法笔记_232:提取拼音首字母(Java)
- 【Java】Java复习笔记-三大排序算法,堆栈队列,生成无重复的随机数列
- 【Java学习笔记】Hashset判断自定义对象是否重复
- java经典算法_011有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- java经典算法_033随机生成不重复的数字
- Java学习笔记13:输出26个字母矩阵
- 黑马程序员—Java基础学习笔记之排序算法:选择排序&冒泡排序
- 串中取3个不重复字母
- 有重复字母的全排列的java程序
- java笔记之数组的概念、声明、初始化、访问方式、复制和动态扩展算法以及递归
- 字符串处理算法(八)将字符串中连续出席的重复字母进行压缩(华为校园招聘题)
- 随读笔记 算法导论 java 版
- java数据结构_笔记(5)_图的算法
- Java通过列索引获取Excel其对应列的字母(两种实现算法)
- JAVA 数据结构与算法学习笔记一(转载)
- 【Java类集】_排序及重复元素说明笔记(实例亲测)
- JVM笔记3:Java垃圾收集算法与垃圾收集器