当前位置: 首页 > 知识库问答 >
问题:

leetcode 139。断字

司马璞
2023-03-14

我正在研究这个问题。似乎我已经找到了正确的答案,并返回true,但随后它被false覆盖…Java新手,抱歉,如果这是一个假问题…我怎么才能返回真?提前谢谢你

问题给定一个字符串s和一个字典单词dict,确定s是否可以被分割成一个或多个字典单词的空格分隔序列。

例如,给定s=“leetcode”,dict=[“leet”,“code”]。

返回true,因为“leetcode”可以分段为“leetcode”。

import java.util.HashSet;
import java.util.Set;
public class Hi {

public static void main(String[] args) {
    String str = "leetcode";
    Set<String> set = new HashSet<String>();
    set.add("leet");
    set.add("code");
    boolean b = wordBreak(str, set);
    System.out.println("b is " + b);
}

public static boolean wordBreak(String s, Set<String> wordDict) {
    if(s.length() == 0 || wordDict.isEmpty()) {
        return false;
    }
    return helper(s, wordDict, 0);
}

public static boolean helper(String s, Set<String> wordDict, int index) {
    if(index == s.length()) {
        System.out.println("1 is called.. ");
        return true;
    }
    int curIndex = index;
    System.out.println("curIndex is " + curIndex);
    while(index < s.length()) {
        //System.out.println("s.length() is " + s.length());
        curIndex++;
        if(curIndex > s.length()) {
            System.out.println("2 is called.. ");
            //return false;
            return false;
        }
        if(wordDict.contains(s.substring(index, curIndex))) {
            System.out.println(s.substring(index, curIndex) + " curIndex is " + curIndex);
            helper(s, wordDict, curIndex);
        }
    }
    System.out.println("3 is called.. ");
    return false;
}

输出:curIndex为0

b是假的

共有1个答案

荀嘉熙
2023-03-14

这可能不能回答你的问题,但我只是提到了一种方法,绝不是说我的方法更好或更优化。

在您的代码中,没有return true语句。代码完成了正确的工作,但在最后,由于循环不会在任何地方中断,它总是返回false。我的意思是,你需要根据某个条件返回true,我在下面的例子中提到了这样的条件之一。

private static boolean test(String str, Set<String> set) {
    int i = 1;
    int start = 0;
    List<String> tokens = new ArrayList<String>();

    while (i <= str.length()) {
        String substring = str.substring(start, i);
        if (set.contains(substring)) {
            tokens.add(substring);
            start = substring.length();
        }
        i++;
    }

    String abc = "";
    for (String a : tokens) {
        abc = abc + a;
    }

    System.out.println(abc);

    if (abc.equals(str)) {
        return true;
    } else {
        return false;
    }
}

下面是调试器中调试跟踪的截图。

 类似资料:
  • 问题内容: 我需要在某个地方修复一些CSS,因为我的文字没有回绕,而如果这是一个非常长的单词,它将无限期地继续下去。 像大多数情况一样,我在CSS文件中尝试了一下,但没有成功。 然后,令我惊讶的是,在Google Chrome开发者工具的建议下,我尝试并解决了我的问题。我对此感到震惊,因此我一直想知道这两者之间的区别,但是在这个主题上我什么也没看到。 此外,我不认为W3没有提及它是有记录的行为。我

  • 问题内容: 今天,我看到了一个带有Java断言而不是JUnit断言的JUnit测试用例-相对于另一个而言,优先选择一个优点还是缺点? 问题答案: 在JUnit4中,JUnit断言引发的异常(实际上是Error)与java 关键字(AssertionError)引发的错误相同,因此它与堆栈跟踪完全相同,除了您无法分辨出其区别。 话虽这么说,断言必须在JVM中使用特殊标志运行,导致许多测试似乎通过了,

  • 问题内容: 所以我有一个先前的问题,但意识到我发布了错误的违规代码。我在下面标记了令人反感的陈述。 我正在尝试使用该switch语句为每个运算符设置优先级。 也许有人可以指出我正确的方向。 请注意,我正在运行JAVA 7,因此String Switch可以工作。 码 opType.java Operator.java 问题答案: 如果您放置了,则该函数会在执行之前返回,因此将永远无法达到。 相反,

  • 在 linux 内核中你会发现很多关于中断和异常处理的话题 中断和中断处理 Part 1. - 描述中断处理主题 深入 Linux 内核中的中断 - 这部分开始描述和初步步骤相关的中断和异常处理。 初步中断处理 - 描述初步中断处理。 中断处理 - fourth part describes first non-early interrupt handlers. 异常处理的实现 - 一些异常处理的

  • mocha允许你使用任意你喜欢的断言库,在上面的例子中,我们使用了Node.js的内置的断言模块作为断言。如果能够抛出一个错误,它就能够运行。这意味着你能使用下面的这些仓库,比如: should.js - BDD风格贯穿始终 expect.js - expect()样式断言 chai - expect(),assert()和should风格的断言 better-assert - C风格的自文档化的

  • 退出(终止)循环。在各种循环中都是有效的。 Break [, LoopLabel] [AHK_L 59+]:如果指定了 LoopLabel,它确定了此语句应该应用于哪层循环;使用标签名或嵌套层级的数值表示。如果省略或为 1,此语句应用于它所在的最内层循环。LoopLabel 必须为常量,不支持变量和表达式。如果指定标签,则它必须直接指向循环命令。 鼓励使用 Break 和 Continue 代替