程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> leetcode筆記:Word Break

leetcode筆記:Word Break

編輯:C++入門知識

leetcode筆記:Word Break


一. 題目描述

Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.

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

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

二. 題目分析

如果使用遞歸,會超時。這時使用動態規劃即可解決問題,即將源字符串s從開始到結尾,分解成各個子串進行操作,對於這類字符串組合問題,需要掌握類似狀態轉移方程。對於下標i所對應字符的匹配狀態flag[i],如果dict有字符串可以匹配,這取決於之前某個字符j的狀態出現匹配,從數組s的j + 1i下標之間的字符也能從dict中找到匹配的字符串:

flag[i] = any(flag[j] && (s[j + 1, i] ∈ dict))

三. 示例代碼

class Solution
{
public:
    bool wordBreak(string s, unordered_set &dict) 
    {
        vector wordFlag(s.size() + 1, false); // 動態規劃
        wordFlag[0] = true;
        for (int i = 1; i < s.size() + 1; ++i)
        {
            for (int j = i - 1; j >= 0; --j)
            {
                if (wordFlag[j] && dict.find(s.substr(j, i - j)) != dict.end())
                {
                    wordFlag[i] = true;
                    break;
                }
            }
        }
        return wordFlag[s.size()];
    }
};

四. 小結

動態規劃對於解決一些字符串的問題也是有效且容易實現的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved