139. 单词拆分
记忆化的迭代版本, 其实相比于递归来说,迭代方法更加容易理解记忆化的本质原理。
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
int length_ = s.length();
bool* mem_ = new bool[length_ + 1]{0};
mem_[length_] = true;
for (int i = length_ - 1; i >= 0; i--) {
for (int j = i; j < length_; j++) {
if (std::find(wordDict.begin(), wordDict.end(), s.substr(i, j - i + 1)) != wordDict.end() && mem_[j + 1]) {
mem_[i] = true;
break;
}
}
}
return mem_[0];
}
};
时间复杂度:O(n^2)
空间复杂度:O(n)

本文介绍了一种解决139.单词拆分问题的高效算法,采用记忆化的迭代方法,避免了重复计算,提高了算法效率。通过实例演示了如何使用C++实现这一算法,详细解释了其工作原理,包括如何利用动态规划思想和数组记录中间结果,最终达到O(n^2)的时间复杂度和O(n)的空间复杂度。
842

被折叠的 条评论
为什么被折叠?



