Word Break

来源:互联网 发布:300036 超图软件 编辑:程序博客网 时间:2024/05/21 15:48

Given a string s and a dictionary of words dict, determine ifs 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".

 

先写测试用例,再写代码!

{"abcde"}    {"a"}/{"ab"}/{"abc","bcd","cde","aaaaaaaaaaa"}

{"aaaaaaa"}  {"a"}

 

 

 

class Solution {public:unordered_map<int, bool>avail;int maxlen;    bool wordBreak(string s, unordered_set<string> &dict) {        if(s.size() == 0 || dict.size() == 0)return false;maxlen = 0;//可能同意个对象,调用多次这个函数for(unordered_set<string>::iterator it = dict.begin(); it != dict.end(); ++it){//cout <<*it;if(it->size() > maxlen)maxlen = it->size();}return judge(0 , s, dict);    }bool judge(int i,string s, unordered_set<string> &dict){if(i == s.size())return true;if(avail.find(i) != avail.end())return avail[i];for(int len = 1; len <= maxlen && i + len <= s.size(); len++)//注意 i越界的情况{string str = s.substr(i, len);if(dict.find(str) != dict.end()){bool rst = judge(i + len, s, dict);if(rst){avail[i] = true;return true;}}}avail[i] = false;return false;}};


 

0 0
原创粉丝点击