检查字符串是否按顺序包含子字符串的字符序列,但不一定彼此相邻

新手上路,请多包涵

给定两个字符串,如果第一个字符串按顺序包含第二个字符串的字符序列,则返回 true,但不一定彼此相邻。

例如,字符串:“我现在饿了,想要食物”,子字符串:“mto”。句子中 o 在 t 之前的子串不算数,它们必须按顺序排列,但不一定彼此相邻。

我并不是真的在寻找代码,只是一般来说你会如何解决这个问题!

原文由 snow 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 568
1 个回答

通常,当您第一次遇到问题时,您应该先评估自己将如何解决问题,然后再考虑如何对计算机进行编程。

如果您尝试自己解决示例问题,您很可能会从第二个字符串中的第一个字符“m”开始,然后搜索该字符在字符串中的第一次出现。在第 3 个索引位置找到“m”后,您将从第 4 个索引开始计算以找到子字符串中的下一个字母。您将继续评估,直到发生以下两种情况之一:

  1. 你找不到其中一个字母。这意味着结果是 false
  2. 您用完了子字符串中的字母。这意味着结果是 true

如果您了解如何自己解决问题,那么只需将解决方案分解为多个步骤即可。

你没有要求它,但如果它让它更清楚,这里有一个解决问题的简单方法:

 public static boolean sub(String string, String substring) {
    // Keep track of our position in the string.
    int index = 0;

    // Iterate through all of the characters in the substring.
    for (char character : substring.toCharArray()) {
        // Find the current character starting from the last character we stopped on.
        index = string.indexOf(character, index);
        // If the method returned -1, the character was not found, so the result is false.
        if (index == -1)
            return false;
    }

    // If we reach this point, that means all characters were found, so the result is true.
    return true;
}

原文由 Caleb Rush 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题