题目描述
输入一个字符串,输出该字符串中相邻字符的所有组合。
举个例子,如果输入abc,它的组合有a、b、c、ab、bc、abc。(注意:输出的组合需要去重)(40分)
输入描述:
一个字符串
输出描述:
一行,每个组合以空格分隔,相同长度的组合需要以字典序排序,且去重。
示例1
输入
bac
输出
a b c ac ba bac
输出不对,需要对结果进行排序
package weipinhui;
import java.util.List;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Scanner;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
public class subString2 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str = in.nextLine();
in.close();
combine(str);
}
public static void combine(String str) {
if (str == null) //如果字符串为空,则直接返回
return;
int length = str.length();
//创建字符串容器
Set<String> res = new HashSet<String>();
for (int i = 0; i < length; i++) {
combination(str, i, res);
}
List<Object> setList= new ArrayList<Object>(res);
Collections.sort(setList, new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return o1.toString().compareTo(o2.toString());
}
});
for(String s : res) {
System.out.print(s + " ");
}
}
public static void combination(String str, int startIndex, Set<String> set) {
StringBuilder sb = new StringBuilder();
for(int i = startIndex; i < str.length(); ++i) {
sb.append(str.charAt(i));
set.add(sb.toString());
}
}
}
输出不对
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str = in.nextLine();
in.close();
combine(str);
}
public static void combine(String str) {
if (str == null) //如果字符串为空,则直接返回
return;
int length = str.length();
StringBuilder sb = new StringBuilder(); //创建字符串容器
for (int i = 0; i < length; i++) {
combination(str, 0, i, sb);
}
}
public static void combination(String str, int index, int number, StringBuilder sb) {
if (number == -1) {
System.out.print(sb.toString()+" ");
return;
}
if (index == str.length())
return;
sb.append(str.charAt(index)); //向StringBuilder中添加元素
combination(str, index + 1, number - 1, sb);
sb.deleteCharAt(sb.length() - 1); //在StringBuilder中删除元素
combination(str, index + 1, number, sb);
}
}
网友评论