每日AC--LeetCode-- wordBreak--动态规划
题目描述
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s ="leetcode",
dict =["leet", "code"].
Return true because"leetcode"can be segmented as"leet code".
AC代码:
import java.util.HashSet;
import java.util.Set;
/**
* 类说明
*
* <pre>
* Modify Information:
* Author Date Description
* ============ =========== ============================
* DELL 2017年8月28日 Create this file
* </pre>
*
*/
public class WordBreak {
/**
* @param str
* @param dict
* @return
* 动态规划,重要的是注重 状态转移方式,和状态转移方程的定义
* d[j] = 表示str(0,j) 是否可以分词 Boolean
* dp[i] = str[j]&& str[j][i] 表示 str(0, i) 是否可以分词
*/
public static boolean wordBreak(String str, Set<String> dict){
int len = str.length();
boolean[] dp = new boolean[len+1];
dp[0] = true;
for(int i = 1; i <= len;i++){
for(int j = 0; j < i; j++){
// 如何体现动态规划思想
if(dp[j] && dict.contains(str.substring(j, i))){
dp[i] = true;
}
}
}
return dp[len];
}
/**
* @param args
*/
public static void main(String[] args) {
String s = "leetcode";
Set<String> set = new HashSet<String>();
set.add("leet");
set.add("code");
boolean result = wordBreak(s, set);
System.out.println("result:"+ result);
}
}