Word Break (C++)
kitt
posted @ 2013年10月08日 23:15
in LeetCode
, 1678 阅读
要首先挑dict里面长的string进行匹配,不然容易超时。对unordered_set不太熟,就用vector<string>排序了一下dict. 对于sort,自己写个比较函数也行,注意要是static,否则会报错,显示cmp的参数不对。因为这是在class里,有一个隐含的this参数,而sort的比较函数是默认没有这个参数的,这一点还是宋大牛指出的。
static bool cmp(string const &a, string const &b) {return a.length() > b.length();} sort(sorted_dict.begin(), sorted_dict.end(), cmp);
class Solution { private: bool search(string s) { int sorted_dict_size = sorted_dict.size(); for (int i = 0; i < sorted_dict_size; i++) { int i_len = sorted_dict[i].length(), s_len = s.length(); if ( (s_len >= i_len) && s.compare(0, i_len, sorted_dict[i]) == 0 ) { if (s_len == i_len) return true; return search(s.substr(i_len, s_len - i_len)); } } return false; } public: vector<string> sorted_dict; bool wordBreak(string s, unordered_set<string> &dict) { sorted_dict.clear(); for (unordered_set<string>::iterator x = dict.begin(); x != dict.end(); ++x) sorted_dict.push_back(*x); sort(sorted_dict.begin(), sorted_dict.end(), greater<string>()); return search(s); } };