【问题标题】:Printing the all possible substrings of a string sorted by length打印按长度排序的字符串的所有可能子字符串
【发布时间】:2018-08-22 05:12:35
【问题描述】:

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

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' 循环,不幸的是没有数组。

我对编程比较陌生,所以如果您能解释一下您的建议,我将不胜感激。谢谢

【问题讨论】:

    标签: java string for-loop substring


    【解决方案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));
                }
            }
        }
    }
    

    【讨论】:

    • 我认为它是从最长到最短,但你的概念仍然存在。
    • 已修复,我在问题中忽略了这一点
    • 我理解其中的逻辑,但如何编写代码呢? ://
    • 没问题,希望有意义
    【解决方案2】:

    诀窍是使用变量作为长度和开始索引,而不是开始和结束索引。

    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 &gt;= 0,那么空字符串"" 将被打印input.length() 次。但由于空字符串"" 是每个字符串的子字符串,我们作弊并仅手动打印一次。

    【讨论】:

    • 非常感谢.. 错过这些基本想法令人沮丧
    • @AtaAtasoy 很高兴我能帮上忙。请接受最能帮助您将问题标记为已关闭的答案。
    猜你喜欢
    • 2020-08-05
    • 2020-03-29
    • 2016-09-10
    • 2015-06-29
    • 1970-01-01
    • 2020-08-03
    • 2017-03-30
    • 2015-08-24
    • 2013-12-30
    相关资源
    最近更新 更多