打印按长度排序的字符串的所有可能子字符串

时间:2018-03-13 19:51:15

标签: java string for-loop substring

任务要求给定一个字符串,它应该打印出按长度排序的所有可能的子字符串。 例如,如果输入很有趣,则应打印

funny
funn
unny
fun 
unn 
nny
...
f
u
n
n
y

这是我的代码

public static void main( String[] args)
  {
    Scanner scan = new Scanner( System.in);

    // constants

    // variables
    String input;


    // program code
    input = scan.nextLine();
    for ( int i = 0; i < input.length(); i++ )
    {
      for ( int j = i + 1 ;  j <= input.length(); j++ )
      {
        System.out.println( input.substring( i , j  ) ); 
      }
    }
  }

该程序打印出所有可能的子字符串,但不按长度排序。我找不到对子串进行排序的方法。我只能使用'do while'或'for'循环,不幸的是没有数组。

我对编程比较陌生,所以如果你能解释一下你的建议我真的很感激。感谢

2 个答案:

答案 0 :(得分:1)

如何按长度顺序打印子串

对于此示例,测试字符串将为abc

首次打印长度为3

abc
---  abc (0,3)

然后打印长度为2的部分:

abc
--   ab  (0,2)
 --  bc  (1,3)

最后,打印部分长度为1,所以打印:

abc
-    a   (0,1)
 -   b   (1,2)
  -  c   (2,3)

这样,字符串按长度顺序打印

如何实施

在伪代码中,这将是:

FOR length in size..1
  FOR start in 0..(size-length)
    print(substring(start, start+length)

在Java中,这将是:

public class Example {
    public static void main(final String... args) {
        String input = new Scanner(System.in).nextLine();

        for (int length = input.length(); length > 0; length--) {
            for (int start = 0; start <= (input.length()-length); start++) {
                System.out.println(input.substring(start, start+length));
            }
        }
    }
}

答案 1 :(得分:0)

诀窍是使用变量来表示长度和起始索引而不是起始和结束索引。

String input = "funny";
for (int length = input.length(); length > 0; --length)
    for (int start = 0; start + length <= input.length(); ++start)
        System.out.println(input.substring(start, start + length));
System.out.println("");

如果我们写length >= 0,那么空字符串""将被打印input.length()次。但由于空字符串""是每个字符串的子字符串,我们作弊并只用手打印一次。