【问题标题】:Substring Recursion from text file Java来自文本文件Java的子字符串递归
【发布时间】:2015-04-25 00:24:46
【问题描述】:

所以对于这个程序,我们将使用递归。我们必须导入一个包含五个单词的文本文件,然后对于这些单词,我们必须找到所有可能的子字符串并将它们存储在一个数组列表中。所以,如果这个词是卡片:cards card car ca cards ard ar a rds rd r ds d s.

说明我们必须创建一个静态方法,该方法返回一个 String 类型的 ArrayList,它只接受一个参数,一个 String。

因此,为了使某些东西递归,它必须调用自身以简化事情,并且必须有一个基本情况的动作。所以现在我有:

public static ArrayList<String> SubstringCalculator (String theName)
{
   /* Do I call create a new ArrayList here? Wouldn't that mean
    * that every time I call this method an entire new ArrayList
    * is created? I only want one ArrayList.
    */
   ArrayList<String> result = new ArrayList<String>();
   System.out.print (theString);
   result.add(theString)   // Add the string to the ArrayList
   if (theString.length > 1) {
      // Make a new string with 1 char less than the original.
      String newString = theString.substring(0, theString.length() - 1);
      // Call the method again with the new string.
      SubstringCalculator (newString);
      return result;
   }
   return theString;   // Return the string if it is of length 1.
}

我知道这是不对的,但我不知道该怎么做。有什么帮助吗?

【问题讨论】:

  • this guy学习同一门课程?
  • 看起来像一个类似的问题,虽然我的方向似乎不同。我们被允许在这个上使用循环(据我所知)。
  • theName 是 theString ???输入错误???
  • 是的,它应该读取 theName,我的输入错误。

标签: java string recursion arraylist substring


【解决方案1】:

这是一个草图。如果字符串为空,则返回一个包含空字符串的列表。如果没有,您有两个字符串:第一个(字符串中的第一个字符)和字符串的其余部分。找到字符串其余部分的所有子字符串,然后将每个子字符串的第一个字符放在所有可能的位置。

【讨论】:

  • 让我困惑的部分是“返回一个字符串”。该方法应该返回一个 ArrayList 那么如果我要返回一个 ArrayList 我应该如何返回一个字符串呢?
【解决方案2】:

如果您的字符串长度为 1,则应返回包含字符串本身的列表。如果字符串的长度大于 1:

  • 初始化一个新列表A

  • 从字符串中取出第一个或最后一个字符并在新的子字符串上调用方法,这将返回一个列表B(这是递归的)

  • 将B的所有元素添加到A

  • 遍历 B 将第一个或最后一个字符附加到 B 中每个字符串的第一个或最后一个位置,然后添加到 A。

  • 返回 A。

【讨论】:

  • 如果该方法应该返回一个 ArrayList,那么我可以只返回一个字符串吗?
  • 如果你想从方法中返回字符串,那么我想你可以将 A 声明为静态字段并仅在 A 上工作(不再需要直接列表 B)
【解决方案3】:

另一个镜头:

  1. 你有字符串输入的功能
  2. 创建一个空的ArrayList
  3. 将您的输入添加到 ArrayList
  4. 如果您的输入只有一个字符长,则返回 ArrayList
  5. 从输入中删除第一个字母
  6. 使用#5 中的字符串调用self。作为输入,保存返回的 ArrayList
  7. 从输入中删除最后一个字母
  8. 使用#7 中的字符串调用self。作为输入,保存返回的 ArrayList
  9. 迭代#6 和#8 的两个结果。
    1. 检查该字符串是否已经在 #2 的 ArrayList 中。
    2. 如果没有,添加它
  10. 从 #2 返回 ArrayList。
  11. 利润

但我还是想不通,怎么优化出9...

【讨论】:

    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2015-11-02
    • 2023-03-23
    相关资源
    最近更新 更多