唯品会-字符串组合-java

2017-09-23  本文已影响0人  Jacinth

题目描述

输入一个字符串,输出该字符串中相邻字符的所有组合。
举个例子,如果输入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);
    }
}

参考:
字符串的所有组合问题,输入三个字符a,b,c,则它们的组合有a,b,c,ab,ac,bc,abc

上一篇下一篇

猜你喜欢

热点阅读