单词拆分!

单词拆分!_第1张图片

回溯法

之前的一道题目回溯算法:131分割回文串,就是枚举字符串的所有分割情况。

回溯算法:分割回文串:是枚举分割后的所有子串,判断是否回文。

本道是枚举分割所有字符串,判断是否在字典里出现过。

所以回溯法C++代码:

时间复杂度:O(2^n),因为每一个单词都有两个状态,切割和不切割
空间复杂度:O(n),算法递归系统调用栈的空间
class Solution {
   
private:
    bool backtracking (const string& s, const unordered_set<string>& wordSet, int startIndex) {
   
        if (startIndex >= s.size()) {
   
            return true;
        }
        for (int i = startIndex; i < s.size(); i++) {
   
            string word = s.substr(startIndex, i - startIndex + 1);
            if (wordSet.find(word) != wordSet.end() && backtracking(s, wordSet, i + 1)) {
   
                return true;
            }
        

你可能感兴趣的:(#,动态规划,leetcode,c++,算法,字符串)