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

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,和一个字典dict,判断s是否满足:如果将s分为若干字串,s1,s2...sn.每个字串在dict中都存在。
例如s="leetcode" ,dict=["leet","code"],s就满足这一点,因为对于字串s1="leet",s2="code"而言,都在dict中可以找到。


思路:
一开始认为本题是典型的回溯+DFS,就是从s的每个字符开始查找,判断s[i...k]是否在dict中可以找到,如果可以,那么继续判断s[k...n]中的某个字串在dict中存在。可是这种算法会超时,无法通过测试数据。


查了一些解法,发现本题其实可以使用DP来做。
1.设dp[i]表示,在s中i的索引处可以在dict中找到。于是就可以遍历s,i∈[0,n)
2.当在i这个位置时,就需要对s[0...i]一一判断:是否存在某个位置满足,dp[0,k]=true并且s[k+1,i]在dict中可以找到(其中,k∈[0,i-1])。如果满足,那么就可以认为dp[i]=true。


实现代码:


public class Solution {
    public bool WordBreak(string s, ISet<string> wordDict) 
    {
        var dict = new Dictionary<string, bool>();
    	foreach(var w in wordDict){
    		dict.Add(w, true);
    	}
    	
    	var found = new bool[s.Length + 1];
    	found[0] = true;
    	
    	for(var i = 0;i < s.Length; i++){
    		for(var j=i; j>=0; j--) {
    			var str = s.Substring(j,i-j+1); 
    			if(dict.ContainsKey(str) && found[j]){
    				found[i+1] = true;
    				break;
    			}
    		}
    	}
    	
    	return found[s.Length];
    }
}


相关文章:

  • LeetCode--H-Index
  • Leetcode--Lowest Common Ancestor of a Binary Search Tree
  • 参加Tibco的SOA应用及2009 IT架构趋势研讨会记
  • Leet 题目整理归类 - 快速通道 (持续更新)
  • 设计模式的阴谋论
  • c# mongodb driver 插入重复记录
  • 中国移动通信信息资源站实体与互联网短消息网关(ISMG)
  • MongoDB C# Driver 使用示例 (2.2)
  • C# GetHashCode 的实现方式
  • SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别比较
  • Dynamic Language Runtime (DLR) 初深
  • 2009 Webware 100 名单揭晓
  • DLR之 ExpandoObject和DynamicObject的使用示例
  • asp.net常用正则表达式
  • .Net 中Partitioner static与dynamic的性能对比
  • [译]CSS 居中(Center)方法大合集
  • 08.Android之View事件问题
  • export和import的用法总结
  • JS 面试题总结
  • React Native移动开发实战-3-实现页面间的数据传递
  • Vim 折腾记
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 模型微调
  • 前端临床手札——文件上传
  • 山寨一个 Promise
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 微信小程序:实现悬浮返回和分享按钮
  • 我看到的前端
  • 小程序开发中的那些坑
  • 硬币翻转问题,区间操作
  • 选择阿里云数据库HBase版十大理由
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #宝哥教你#查看jquery绑定的事件函数
  • $.ajax()方法详解
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (MATLAB)第五章-矩阵运算
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)SpringBoot3---尚硅谷总结
  • (转)http-server应用
  • (转载)Linux网络编程入门
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [Avalon] Avalon中的Conditional Formatting.
  • [BUUCTF 2018]Online Tool(特详解)