public boolean wordBreak(String s, Set<String> dict) {
if(s.length()==0) return true;
String first = null;
boolean isOk= false;
for(int i=1; i<s.length(); i++){
first = s.substring(0,i);
if(dict.contains(first)){
String remaining = s.substring(i);
isOk = wordBreak(remaining, dict);
if(dict.contains(remaining))
isOk=true;
if(isOk)
return isOk;
}
}
return false;
}
我无法通过案例的无限循环: “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab”
执行输入:[“a”,“aa”,“aaa”,“aaaa”,“aaaaa”,“aaaaaa”,“aaaaaaa”,“aaaaaaaa”,“aaaaaaaa”,“aaaaaaaaa”] 任何人都可以帮我指出逻辑中的错误吗?感谢
答案 0 :(得分:1)
你没有无限循环,你有无限递归。这是因为当您使用String调用此方法时,您要做的第一件事就是使用相同的字符串调用自身。
你也检查过contains()几次,但你永远不会更新dict,所以不清楚这是真的。
执行输入:[“a”,“aa”,“aaa”,“aaaa”,“aaaaa”,“aaaaaa”,“aaaaaaa”,“aaaaaaaa”,“aaaaaaaa”,“aaaaaaaaa”]任何人都可以帮助我指出逻辑中的错误?
一些要点
dict
。我不确定它到底做了什么,但你可以做的是
public void wordBreak(String s, Set<String> dict) {
for(int i = 0; i < s.length(); i++)
for(int j = i + 1; j < s.length(); j++)
dict.add(s.substring(i, j));
}