class Solution {
public:
bool wordBreak(string s, unordered_set<string> &dict) {
int n=s.size();
vector<bool> dp(n+1,false);
//dp[i]表示以第一个字符开始的,长度为i的substring 是不是可以拆分成单词,从左往右推进,每到一个位置i的时候,另一变量从i-1向反方向
//推进,table[j]为真表示0-j-1的substring可以被拆分,那么只要从j到i-1可以被拆分,table[i]=true。
dp[0]=true;
for(int i=1;i<n+1;i++)
{
for(int j=i-1;j>=0;j--)
{
if(dp[j]&&dict.find(s.substr(j,i-j))!=dict.end())
{
dp[i]=true;
break;
}
}
}
return dp[n];
}
};
public:
bool wordBreak(string s, unordered_set<string> &dict) {
int n=s.size();
vector<bool> dp(n+1,false);
//dp[i]表示以第一个字符开始的,长度为i的substring 是不是可以拆分成单词,从左往右推进,每到一个位置i的时候,另一变量从i-1向反方向
//推进,table[j]为真表示0-j-1的substring可以被拆分,那么只要从j到i-1可以被拆分,table[i]=true。
dp[0]=true;
for(int i=1;i<n+1;i++)
{
for(int j=i-1;j>=0;j--)
{
if(dp[j]&&dict.find(s.substr(j,i-j))!=dict.end())
{
dp[i]=true;
break;
}
}
}
return dp[n];
}
};