Word Break

  • 问题来源
  • 问题简介

    设计一个函数,接收一个字符串s和一个字典dict(字符串列表,无重复),要求返回s是否能被若干个dict里的字符串构成。


解题思路


令len为字符串S的长度。
令Si代表由前i个字符组成的字符串,i = {1,2….len-};
如果我们知道了Si能否由dict里的字符串构成,就只需检测剩下的S[i, len]是否存在于字典。
同时,对于Si能否由dict里的字符串构成,这又是同样的一个问题了。

时间复杂度 空间复杂度
O(未知) O(未知)

Code

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        int size = s.length();
        vector<bool> avalible(size + 1, false);

        unordered_set<string> set;
        for (auto str : wordDict) {
            set.insert(str);
        }
        auto notFound = set.end();
        avalible[0] = true;
        for (int i = 1; i <= size; i++) {
            for (int j = i - 1; j >= 0; j--) {
                if (avalible[j] && set.find(s.substr(j, i - j)) != notFound) {
                    avalible[i] = true;
                    break;
                }
            }
        }
        return avalible[size];
    }
};

运行结果

Word Break