139. Word Break

来源:互联网 发布:制图软件photoshop 编辑:程序博客网 时间:2024/05/18 22:17

  1.对于这个问题首先想到的是递归方法,关于遍历的问题,不一定非要通过字符串下标来遍历字符串,通过遍历字典中的字符串更简洁明了,但是一般来说递归总是会有超时问题,遇到这种问题尽量使用动态规划方法:

  public boolean wordBreak(String s, List<String> wordDict) {

if(wordDict.size()==0){
return false;
}

if(str.length==0){

return true;

}
for(String str:wordDict){
if(s.equals(str)){
return true;
}
if(s.indexOf(str)==0){
if(wordBreak(s.substring(str.length()), wordDict)){
return true;
}
}

}

return false;
}

2.动态规划思想,动态规划的核心思想是建立数组,初始化,然后写出递推式,最后返回结果。就本题而言,我们定义状态数组:state[s.length()+1],state[i]代表:string[0,i-1] 可被字典中的单词分割。状态转移方程:state[i] = {state[j]&&string[i,j]在字典中,0=<j<i}。

public boolean wordBreak(String s, List<String> wordDict) {
if(wordDict.size()==0){
return false;
}
if(s.length()==0){
return true;
}
int[] state=new int[s.length()+1];
state[0]=1;
for(int i=1;i<s.length();i++){
for(int j=0;j<i;j++){
if(state[j]==1 && wordDict.contains(s.substring(j,i))){
state[i]=1;
}
}
}

return (state[s.length()]==1);
}

原创粉丝点击