Pow(x, n) (C++)
Two Sum @ LeetCode (Python)

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);
  }
};

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter