• 从递归到memo到动态规划


    //memo,记忆化搜索

    class Solution {
        int[][] memo;
        public boolean wordBreak(String s, List<String> wordDict) {
            int n=s.length();
            memo=new int[n+1][n+1];
            for(int i=0;i<=n;i++)
                for(int j=0;j<=n;j++)
                    memo[i][j]=-1;
            return breakWord(s,wordDict,0,n);
        }
        public boolean breakWord(String s,List<String> wordDict,int l,int r)
        {
             if(r==0)
                 return true;
             if(memo[l][r]!=-1)
                    return memo[l][r]==1;  
            memo[l][r]=0;
            for(int i=r-1;i>=0;i--)
            {
               if(helper(s.substring(i,r),wordDict)&&breakWord(s,wordDict,l,i))
               {
                   memo[l][r]=1;
                   break;
               }
            }
            return memo[l][r]==1;
        }
        public boolean helper(String s,List<String> wordDict)
        {
            for(String str:wordDict)
            {
                if(str.equals(s))
                    return true;
            }
            return false;
        }
    }

    //动态规划

    class Solution {
        public boolean wordBreak(String s, List<String> wordDict) {
            int n=s.length();
            boolean[] dp=new boolean[n+1];
            dp[0]=false;
            for(int i=1;i<=n;i++)
            {
                if(helper(s.substring(0,i),wordDict))
                    dp[i]=true;
                else
                {
                    dp[i]=false;
                    for(int j=i-1;j>=0;j--)
                    {
                        if(helper(s.substring(j,i),wordDict)&&dp[j])
                        {
                            dp[i]=true;
                            break;
                        }
                    }
                }
            }
            return dp[n];
        }
         public boolean helper(String s,List<String> wordDict)
        {
            for(String str:wordDict)
            {
                if(str.equals(s))
                    return true;
            }
            return false;
        }
    }

  • 相关阅读:
    MySql数据库的导入_命令工具
    Java_JVM学习笔记(深入理解Java虚拟机)___重点
    HTML——<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    HTML——表格table标签,tr或者td
    Java _Map接口的使用(转载)
    Java_Web _Servlet生命周期实验
    Java_Web___字符串转码String.getBytes()和new String()——(转)
    Java_Iterator-------迭代器配合Listarray使用,具有更多的功能(转载)
    Java_LIST使用方法和四种遍历arrayList方法
    Java_web 乱码和一些地址输错的问题(原创)
  • 原文地址:https://www.cnblogs.com/cold-windy/p/11494445.html
Copyright © 2020-2023  润新知