如何对以第一个字符开头的字符串数组进行排序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对以第一个字符开头的字符串数组进行排序?相关的知识,希望对你有一定的参考价值。

我想生成字符串的“子集”,并按特定顺序打印输出。例如,“ rum”,我希望输出为[rum,ru,rm,r,um,u,m]我的代码在下面,现在我的输出是[rum,ru,rm,um,r,u,m]。如何更改代码以使其正常工作?

import java.util.*;
public class SubstringGenerator 
    String word;

    public SubstringGenerator(String x)  word = x;

    public static void main(String[] args)
        SubstringGenerator a = new SubstringGenerator("rum");
        List b = a.subsets();
        Collections.sort(b, Collections.reverseOrder(Comparator.comparing(String::length)));
        System.out.println(b);
    

    public List subsets()
        ArrayList<String> subsets = new ArrayList<String>();
        int len = word.length();
        for (int i = 0; i < Math.pow(2,len); i++)
            String a = "";
            for (int j = 0; j < len; j++)
                if ((i & (int) (Math.pow(2,j))) > 0) a += word.charAt(j) + "";
            
            subsets.add(a);
        
        return subsets;
    

答案
import java.util.*; import java.lang.Math; public class SubstringGenerator String word; public SubstringGenerator(String x) word = x; public static void main(String[] args) SubstringGenerator a = new SubstringGenerator("rum"); List b = a.subsets(); System.out.println(b); public List subsets() ArrayList<String> subsets = new ArrayList<String>(); int len = word.length(); for (int i = (int)(Math.pow(2,len)-1.0); i >0; i--) String a = ""; String b= Integer.toBinaryString(i); while(b.length()!=word.length()) b="0"+b; for(int j=0; j<b.length(); j++) if (b.charAt(j)=='1') a+=word.substring(j, j+1); subsets.add(a); return subsets;

以上是关于如何对以第一个字符开头的字符串数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

华为机试真题 C++ 实现字符串排序

如何使用基数排序对变长字符串数组进行排序?

如何实现基于连字符分隔的子串的多个自定义排序规则?

如何对字符串数组的每个字符串进行排序

如何使用快速排序对字符串数组进行排序

订购印地语字符