美文网首页
唯品会-字符串组合-java

唯品会-字符串组合-java

作者: Jacinth | 来源:发表于2017-09-23 16:34 被阅读0次

    题目描述

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

    相关文章

      网友评论

          本文标题:唯品会-字符串组合-java

          本文链接:https://www.haomeiwen.com/subject/psbcextx.html