Word Break

For example, given
s = "leetcode",
dict = ["leet", "code"].

Return true because "leetcode" can be segmented as "leet code".

第一种解法:递归。

结果超时!!!

public boolean wordBreak(String s, Set<String> dict) {
        int length = s.length();
		 String sub = "";
		 for(int i = 1;i<length;i++){
			 sub = s.substring(0, i);		
			 if(dict.contains(sub)) {
			     if(i == length) return true;
			     else if(wordBreak(s.substring(i),dict)) return true;
			 }
		 }
	     return false;
    }

第二种解法:动态规划。

设置布尔记忆数组dp[i]表示s.substring(0,i+1)是否可以按照字典分解

根据前面的dp[i]求解出所有的dp[i],最后输出dp[length-1]

    public boolean wordBreak(String s, Set<String> dict) {
        int length = s.length();
		boolean[] dp = new boolean[length];
		for(int i = 0;i<length;i++){
			 dp[i] = isMatch(s.substring(0,i+1),dict);
			 if(!dp[i]){//如果前i个子串不能匹配,则将它再次分割
			 	for(int j = 0;j<i;j++){
			 		if(dp[j] && isMatch(s.substring(j+1,i+1),dict)){//如果前j个子串可以分割,则看后面的字串是否匹配,只要有一种情况可以匹配,则表示可以分割,即刻跳出循环
			 		    dp[i]=true;
			 		    break;
			 		}
			 	}
			 }
		 }
	    return dp[length-1];
    }
    public boolean isMatch(String sub, Set<String> dict){
    	if(dict.contains(sub)) return true;
    	return false;
    }



你可能感兴趣的:(Word Break)