• leetcode[139] Word Break


    给一个字符串,判断是否能够分为若干个部分,并且每个部分都能在字典dict里面找到。有的话就返回true。例如:

    For example, given
    s = "leetcode",
    dict = ["leet", "code"].

    Return true because "leetcode" can be segmented as "leet code".

    思路:利用动态规划,一开始初始化的时候数组dp[]存的是每个位置到终点的词是否在词典里。如果是存true。
    然后从后往前,判断当前的dp[i]是否为true,是的话就直接--,如果不是就判断有没有可能变为true,判断能不能变为true就是遍历从i到结尾的每个字词是否存在dict中并且字词之后的部分dp[]为true。
    随后就是看dp[0]是false还是true了
    class Solution {
    public:
        bool wordBreak(string s, unordered_set<string> &dict)
        {
            bool dp[s.size()];
            memset(dp, 0, sizeof(dp));
            for (int i = 0; i < s.size(); i++)
            {
                if (dict.count(s.substr(i, s.size() - i)))
                    dp[i] = 1;
            }
            for (int i = s.size() - 1; i < s.size(); i--)
            {
                if (dp[i] == false)
                {
                    for (int j = i; j < s.size(); j++)
                    {
                        if (dict.count(s.substr(i, j - i + 1)) && dp[j + 1])
                            dp[i] = true;
                        if (dp[i])
                            break;
                    }
                }
            }
            return dp[0];
        }
    };

    这题好像个之前做过的leetcode Palindrome Partitioning II有相似的地方。这题比它容易一些。

  • 相关阅读:
    第五章:Admin管理后台
    第五章:Admin管理后台
    第五章:Admin管理后台
    第五章:Admin管理后台
    第四章:Django表单
    第四章:Django表单
    第四章:Django表单
    第四章:Django表单
    第四章:Django表单
    第四章:Django表单
  • 原文地址:https://www.cnblogs.com/higerzhang/p/4159775.html
Copyright © 2020-2023  润新知