当前位置: 首页 > news >正文

算法练习Day46|139.单词拆分

LeetCode:139.单词拆分 

139. 单词拆分 - 力扣(LeetCode)

1.思路

字符串是否能被字符串列表中的元素拼接出来,显然是一个背包问题,而且需要排列。
将字典转换为HashSet,利用'.contains()'方法判断是否存在元素与背包中的子串相同,首位置相同则为true,其后位置的判断需要依据当前段是否匹配和前面子串为true的条件!!

2.代码实现

 1class Solution {2    public boolean wordBreak(String s, List<String> wordDict) {3        // 将单词字典转换为 HashSet,以便快速查找单词是否存在4        HashSet<String> set = new HashSet<>(wordDict);56        // valid 数组用于记录字符串 s 的前缀是否可以被拆分为字典中的单词7        boolean[] valid = new boolean[s.length() + 1];8        valid[0] = true; // 空字符串可以被拆分9
10        // 遍历字符串 s 的每个位置
11        for (int i = 1; i <= s.length(); i++) {
12            // 遍历当前位置之前的每个位置 j
13            for (int j = 0; j < i && !valid[i]; j++) {
14                // 如果子串 s[j, i] 存在于单词字典中,并且 s[0:j] 可以被拆分,则将 valid[i] 设置为true
15                if (set.contains(s.substring(j, i)) && valid[j]) {
16                    valid[i] = true;
17                }
18            }
19        }
20        // 返回 valid 数组的最后一个元素,表示整个字符串 s 是否可以被拆分为字典中的单词
21        return valid[s.length()];
22    }
23}

3.复杂度分析

时间复杂度:O(n^2*m).

空间复杂度:O(m).

http://www.lryc.cn/news/121014.html

相关文章:

  • Maven工程的安装配置及搭建(集成eclipse完成案例,保姆级教学)
  • 82 | Python可视化篇 —— Plotly数据可视化
  • Golang 包详解以及go mod
  • 中级课程-SSRF(CSRF进阶)
  • C++命名空间
  • 阿里云服务器搭建Magento电子商务网站图文教程
  • Docker安装 Kibana
  • 数字图像处理 --- 相机的内参与外参(CV学习笔记)
  • 基于新浪微博海量用户行为数据、博文数据数据分析:包括综合指数、移动指数、PC指数三个指数
  • 金融反欺诈的应用实践
  • Win10启动Jmeter报错提示jmeter.log拒绝访问问题
  • Vue中使用Tailwind css
  • 承接各种设计
  • HTTP请求性能分析 - 简单
  • 腾讯云标准型CVM云服务器详细介绍
  • 基于DEM tif影像的插值平滑和tif纹理贴图构建方法
  • Redis_五种数据类型及操作命令
  • Mac如何打开隐藏文件中Redis的配置文件redis.conf
  • nginx+flask+uwsgi部署遇到的坑
  • vue实现pdf预览功能
  • (原创)Flutter与Native页面互相跳转
  • web集群学习--基于CentOS构建LVS-DR集群、配置nginx负载均衡
  • 基于 FPGA 的电机控制
  • STM32F429IGT6使用CubeMX配置IIC通信(AT2402芯片)
  • JS逆向系列之猿人学爬虫第14题-备而后动-勿使有变
  • 学cpp看的那点书
  • 【C++】常用容器-string容器
  • SSH无法连接kali,拒绝密码
  • 竞赛项目 深度学习的口罩佩戴检测 - opencv 卷积神经网络 机器视觉 深度学习
  • redis 数据结构(一)