/* 题目描述:从字典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]; } };