Word Break

DP

    bool wordBreak(string s, unordered_set<string> &dict) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        //dp
        if(dict.find(s)!=dict.end())
            return true;
        int n = s.size();
        vector<vector<bool>> dp(n,vector<bool>(n,false));
        int i,j,k;

        for(i=n-1;i>=0;i--)
        {
            if(dict.find(s.substr(i,1))!=dict.end())
                dp[i][i] = true;
            for(j=i+1;j<n;j++)
            {
                if(dict.find(s.substr(i,j-i+1))!=dict.end())
                {
                    dp[i][j] = true;
                }else
                {
                    for(k=i;k<j;k++)
                    {
                        if(dp[i][k]&&dp[k+1][j])
                        {
                            dp[i][j] = true;
                            break;
                        }
                    }
                }
            }
        }
        
        return dp[0][n-1];
    }

  

posted @ 2013-10-06 23:22  summer_zhou  阅读(128)  评论(0编辑  收藏  举报