我正在研究这个问题。似乎我找到了正确的答案并且返回true但是它被错误覆盖了...... Java中的新手,对不起,如果它是一个虚拟问题..我如何才能返回true? 提前谢谢
问题 给定一个字符串s和一个单词字典dict,确定s是否可以被分割成一个或多个字典单词的空格分隔序列。
例如,给定 s =" leetcode", dict = [" leet"," code"]。
返回true,因为" leetcode"可以分段为" leet code"。
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
leet curIndex是4
curIndex是4
代码curIndex是8
1被称为..
2被称为..
2被称为..
b是假的
答案 0 :(得分:0)
这可能无法解答您的问题,但我刚才提到了一种方法,绝不是说我的方法更好或更优。
在您的代码中,没有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;
}
}
以下是调试器内调试跟踪的屏幕截图。