您的位置:首页 > 其它

leetcode:Word Break

2014-07-27 20:48 363 查看
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.

For example, given

s =
"leetcode"
,

dict =
["leet", "code"]
.

Return true because
"leetcode"
can be segmented as
"leet
code"
.

class Solution {
public:
bool wordBreak(string s, unordered_set<string> &dict) {

set<int> dicWordLen;
unordered_set<string>::iterator itr=dict.begin();

while (itr != dict.end())
{
int len = (*itr).size();
dicWordLen.insert(len);
++itr;
}

int strLen = s.size();
vector<bool> D(strLen+1);

for (int i=0; i<strLen+1; i++)
{
D[i] = false;
}

D[0] = true;//这个初始化很重要

for (int i = 0; i < strLen; i++)
{
set<int>::iterator itr = dicWordLen.begin();

while (itr != dicWordLen.end())
{
if ((*itr) <= i+1) //the len from 0 to i is i+1 在这里我们只考虑在字典里长度比当前长度小的那些词
{
if (D[i+1-(*itr)] == true)
{
string subString = s.substr(i-(*itr)+1, (*itr));

unordered_set<string>::iterator itr = dict.find(subString);
if (itr != dict.end())
{
D[i+1] = true;
break;
}
}
}
else
{
break;
}
++itr;
}
}

return D[strLen];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: