2016-09-07 51 views
0

我正在處理這個問題。這似乎是我找到了正確的答案,並返回true,但然後它被錯誤覆蓋..新手在Java中,對不起,如果它是一個虛擬的問題..我怎麼才能返回true? 預先感謝您leetcode 139. Word Break

問題 給定一個字符串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

萊特curIndex是4

curIndex是4

代碼curIndex是8

1被稱爲..

2被稱爲..

2稱爲..

b爲假

+0

@BrandonIbbotson您可以點擊剛纔的圖片,它會感謝被放大。 – success

+1

@BrandonIbbotson我修正了它..謝謝你的建議。 – success

回答

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; 
    } 
} 

下面是調試器中調試軌跡的截圖。

enter image description here

+0

感謝您的解決方案,但如果我能知道我的代碼中存在什麼問題,它可能會更有幫助。謝謝你。 – success

+0

當然!我剛剛更新了我的答案。 –

+0

我實際上有「返回true」聲明,但它被「return false」覆蓋 – success