您的位置:首页 > 其它

LeetCode: Word Break [139]

2014-06-28 20:57 323 查看

【题目】

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"
.

【题意】

给定一个字符串s和词典dict, 判定s能够用dict中的单词拼接而成

【思路】

依次确定以每个位置i结尾的单词的前驱单词集合(只要记住前驱单词的结束位置)

如果s[i]存在前驱集合,也就是说s[0~i]能被切割成dict中的单词

本地要做的就是一次判断s[0-i]被切分成dict中的单词

要判断s[0-i]只需要借助s[0-j] j=0,1,...,i-1, 存在j使得s[0-j]可分割,则只需要判断s[j+1, i],如果s[j+1, i]是dict中的单词,则可判定s[0-i]可分割

DP问题



【代码】

class Solution {
public:
bool wordBreak(string s, unordered_set<string> &dict) {
if(s.length()==0)return false;
vector<bool> canSegmented(s.length(), false);
vector<int> segmentedIndex(1, -1);  //记录可被完整切分的位置
//依次判定每个位置i上s[0-i]能够被完整切分
for(int i=0; i<s.length(); i++){
//根据以确定的可切分位来判断当前位
for(int k=0; k<segmentedIndex.size(); k++){
if(dict.find(s.substr(segmentedIndex[k]+1, i-segmentedIndex[k]))!=dict.end()){
canSegmented[i]=true;
segmentedIndex.push_back(i);
break;
}
}
}
return canSegmented[s.length()-1];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: