139. Word Break (M)

本文深入探讨了WordBreak问题,一种常见的字符串分割问题,通过检查给定字符串是否能被分割成字典中的单词序列。文章提供了两种解决方案:使用DFS加记忆化搜索的方法避免重复计算,以及动态规划方法,通过构建DP数组优化查找过程。

Word Break (M)

Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words.

Note:

  • The same word in the dictionary may be reused multiple times in the segmentation.
  • You may assume the dictionary does not contain duplicate words.

Example 1:

Input: s = "leetcode", wordDict = ["leet", "code"]
Output: true
Explanation: Return true because "leetcode" can be segmented as "leet code".

Example 2:

Input: s = "applepenapple", wordDict = ["apple", "pen"]
Output: true
Explanation: Return true because "applepenapple" can be segmented as "apple pen apple".
             Note that you are allowed to reuse a dictionary word.

Example 3:

Input: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
Output: false

题意

判断给定字符串按照某种方式分割后得到的所有子串能否在给定数组中找到。

思路

  1. 纯DFS会超时,所以利用Map记录下所有执行过的递归的结果。

  2. 动态规划。dp[i]代表s中以第i个字符结尾的子串是否满足要求,则状态转移方程为:只要有任意一个j(j<i)满足 dp[j]==true && wordDict.contains(s.substring(j,i))==true,那么dp[i]=true。


代码实现 - dfs+记录

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        return isValid(s, 0, wordDict, new HashMap<>());
    }

    private boolean isValid(String s, int start, List<String> wordDict, Map<Integer, Boolean> record) {
        if (start == s.length()) {
            return true;
        }
        if (record.containsKey(start)) {
            return record.get(start);
        }

        for (int end = start + 1; end <= s.length(); end++) {
            if (wordDict.contains(s.substring(start, end)) && isValid(s, end, wordDict, record)) {
                record.put(start, true);
                return true;
            }
        }
        
        record.put(start, false);
        return false;
    }
}

代码实现 - 动态规划

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        boolean[] dp = new boolean[s.length() + 1];
        dp[0] = true;
        for (int i = 1; i <= s.length(); i++) {
            for (int j = 0; j < i; j++) {
                if (dp[j] && wordDict.contains(s.substring(j, i))) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[s.length()];
    }
}
使用Python从锐研数据新闻库新闻中提取北京银行与科技公司合作信息的方法,尽可能只用SCRAPY,BEAUTIFULSOUP,SELENIUM,PANDAS,jieba,正则表达式或gne第三方库来解析网页中的发布时间,要分析出所有的科技公司,该选上面哪条,去点击网络,再查看里面的网站信息请求 URL https://www.ringdata.com/news/result?keywords=%E5%8C%97%E4%BA%AC%E9%93%B6%E8%A1%8C%20%E7%A7%91%E6%8A%80%E5%85%AC%E5%8F%B8%20%E5%90%88%E4%BD%9C 请求方法 GET 状态代码 304 Not Modified 远程地址 47.102.227.142:443 引用站点策略 strict-origin-when-cross-origin connection keep-alive date Sun, 31 Aug 2025 18:53:25 GMT etag "682555e5-be0" last-modified Thu, 15 May 2025 02:48:05 GMT server nginx set-cookie acw_tc=0aef812717566664052094279e3a26289c510bb25a215a9c64b3670e274607;path=/;HttpOnly;Max-Age=1800 accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 accept-encoding gzip, deflate, br, zstd accept-language zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6 cache-control max-age=0 connection keep-alive cookie x-hng=lang=zh-CN&domain=www.ringdata.com; tokenWebRefresh=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySW5mbyI6eyJ1c2VySWQiOjM4MTQ2LCJuYW1lIjoi5Yav6YC45L2zIiwidGVsUGhvbmUiOm51bGwsImVtYWlsIjoiZmVuZzEyM2ZveEBmb3htYWlsLmNvbSIsImlmTG9naW5ObHAiOmZhbHNlLCJubHBSb2xlIjpudWxsLCJubHBQZXJtaXNzaW9uIjpudWxsLCJpZkxvZ2luU3BpZGVyIjpmYWxzZSwic3BpZGVyUm9sZSI6bnVsbCwic3BpZGVyUGVybWlzc2lvbiI6bnVsbCwiaWZMb2dpbkNuZCI6ZmFsc2UsInBlcm1pc3Npb24iOm51bGwsInR5cGUiOjEsIndzS2V5IjoiMzgxNDZfMTc1NjU3ODk5MTAwMCIsInRva2VuIjpudWxsfSwidXNlcl9uYW1lIjoi5Yav6YC45L2zIiwic2NvcGUiOlsiYWxsIl0sImF0aSI6IjFjYzNjZGFjLWIwZmEtNDQ0Yi05M2ExLWM2ZWIzZTgxNzZjOSIsImV4cCI6MTgyODU4MjU5MSwianRpIjoiODVhZDljZGQtOWIwMC00ZmY5LTgyODItNGY0ZjRhYjFmZDY5IiwiY2xpZW50X2lkIjoibW9uZXR3YXJlIn0.zOAr-8CgRuNHWHnR1P6EHeUV7-xK9s71VCJh1h36isM host www.ringdata.com if-modified-since Thu, 15 May 2025 02:48:05 GMT if-none-match W/"682555e5-be0" sec-ch-ua "Not;A=Brand";v="99", "Microsoft Edge";v="139", "Chromium";v="139" sec-ch-ua-mobile ?0 sec-ch-ua-platform "Windows" sec-fetch-dest document sec-fetch-mode navigate sec-fetch-site same-origin sec-fetch-user ?1 upgrade-insecure-requests 1 user-agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36 Edg/139.0.0.0 这是网页的信息
09-02
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值