首页 > 代码库 > LeetCode: Word Break [139]
LeetCode: Word Break [139]
【题目】
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]; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。