2016-09-07 6 views
0

私はこの質問に取り組んでいます。私は正解を見つけて真実を返すように思えますが、それは偽で上書きされます。Javaの初心者、ダミーの質問であれば申し訳ありません。 は事前に文字列sと単語辞書の辞書、sが1のスペース区切りのシーケンスまたは複数の辞書の単語に分割することが可能かどうかを判断考えるleetcode 139.単語区切り

質問 、ありがとうございました。

たとえば、 s = "leetcode"、 dict = ["leet"、 "code"]と指定します。

「リートコード」は「リートコード」としてセグメント化することができるため、trueを返します。

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はcurIndex 4

curIndex 4

コードcurIndexが

.. 8

1と呼ばれているある0

すご腕あります

と呼ばれる2 ..

2と呼ばれます。..

bが偽である

+0

あなただけの絵をクリックすることができますし、それは。おかげでズームされます@BrandonIbbotson。 – success

+1

@BrandonIbbotson私はそれを修正しました。アドバイスをいただきありがとうございます。 – success

答えて

0

このあなたの質問に答えるが、私はただのアプローチを述べ、そして決して私は私のアプローチことを言っていない可能性がありますより良いまたはより最適です。

コードには、return trueという文はありません。コードは正しい動作をしますが、最後にはループがどこにも破られないので、常にfalseを返します。私はあなたがいくつかの条件と私の下の例で言及したそのような条件の1つに基づいてどこかで真実を返す必要があることを意味します。

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

私は実際に "return true"ステートメントを持っていますが、 "return false"によって上書きされます。 – success

関連する問題