word break

/*
题目描述:从字典dict中找某些子串来组合成s
思路:用dp来记录以序号i为结尾的字符串能否在字典中匹配成功。
当有字符s[i]匹配不成功,而该字符前面的dp[j]出现了true,那么可以看是否有分割字符,即该j+1到i的子串看是否可以在字典中匹配。
例如s="abcd" dict=[a,b,abc,cd]
dp[0]=true
dp[1]=true
dp[2]=true
dp[3]=false,同时需要确定1~3,2~3,3~3(d字符本身)之间是否能在dict中找到,若找到则dp[3]=true
*/
class Solution {
public:
    string getSubStr(int start,int end,string s){
        return s.substr(start,end-start+1);
    }
    bool wordBreak(string s, unordered_set<string> &dict) {
        int len=s.size();
        int i=0,j=0;
        vector<bool> dp(len,false);
        
        for(i=0;i<len;++i)
        {
            dp[i]=dict.count(getSubStr(0,i,s));
            if(dp[i]) continue;
            else
            {
                for(j=0;j<i;++j)
                {
                    if(dp[i]) break;
                    if(dp[j])dp[i]=dict.count(getSubStr(j+1,i,s));
                }
            }
        }
        return dp[len-1];
    }
};

 

posted @ 2014-12-28 16:38  雄哼哼  阅读(181)  评论(0编辑  收藏  举报