每个字符往集合里存,再遍历集合里的字符对象,如果集合里的字符对象不包含当前遍历到的集合对象,就相加,然后再加到集合里,你可以先想一下,再看代码
- private static void method(String string) {
- LinkedHashSet<String> lhs = new LinkedHashSet<String>();
- // 往集合里存一个空串用于第一次遍历集合
- lhs.add("");
-
- for (int i = 0; i < string.length(); i++) {
- for (int j = 0; j < string.length(); j++) {
- // 截取字符串中的一个字符
- String srt = string.substring(j, j + 1);
- // 创建一个集合
- LinkedHashSet<String> tempLhs = new LinkedHashSet<String>();
- // 遍历lhs集合
- for (String s : lhs) {
- // 若遍历当前对象里不包含当前srt字符串,则把srt添加到字符串中
- if (! s.contains(srt)) {
- s = s + srt;
- }
- // 把添加后的字符串存到tempLhs集合
- tempLhs.add(s);
- }
- // 把tempLhs集合里的元素全部添加到lhs集合
- lhs.addAll(tempLhs);
- }
- }
- // 删除集合里的空串
- lhs.remove("");
-
- // 创建一个TreeSet集合,自定义一个比较器
- TreeSet<String> ts = new TreeSet<String>(new Comparator<String>() {
- @Override
- public int compare(String o1, String o2) {
- // 比较字符串长度为主要条件,字符串字典顺序为次要条件
- int i = o1.length() - o2.length();
- int j = o1.compareTo(o2);
- return i == 0 ? j : i;
- }
-
- } );
- // 添加lhs集合里的所有元素到ts集合,排序
- ts.addAll(lhs);
- for (String s : ts) {
- System.out.println(s);
- }
- }
复制代码 |