博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode139:Word Break
阅读量:6708 次
发布时间:2019-06-25

本文共 1558 字,大约阅读时间需要 5 分钟。

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”.

记得最開始做动态规划的题时是打开过这道题的,可是那时没什么思路。如今动态规划的题刷了不少了,今天再做这道题时非常快就想出了状态和状态转移方程。不能不说还是有点进步。

定义A[i]表示0到下标为i的子字符是否能被切割成dict中的多个单词。
那么A[i]与A[j],0<=j< i都有关系,即A[i]与前A[]中的前i-1项都有关系,详细为:

  1. 假设A[0]为1。推断s中下标从1開始到i结束的字符是否在dict中,假设在,设置A[i]为1,跳出。否则进入第二步。
  2. 假设A[1]为1,推断s中下标从2開始到i结束的字符是否在dict中。假设在。设置A[i]为1,跳出,否则进入第二步;
    …..
    这样一直遍历到A[i-1]位置。

    在上面的遍历过程中假设遍历到某一步j,A[j]=1而且j+1到i表示的字符串出如今dict中,表示前j个字符串能切割成dict中的单词,j+1到i中的字符串串也能切割成dict中的单词。这样表示前i个字符能被切割成dict中的单词。

实际编写代码时,j能够从i開始倒着開始遍历,这样能够降低遍历的次数。

runtime:4ms

class Solution {public:    bool wordBreak(string s, unordered_set
& wordDict) { int length=s.size(); int *A=new int[length](); for(int i=0;i
=0;j--) { if(j==i) { A[i]=isExist(s,0,i,wordDict); } else if(A[j]==1) { A[i]=isExist(s,j+1,i,wordDict); } if(A[i]==1) break; } } return A[length-1]==1; } int isExist(string &s,int first,int last,unordered_set
&wordDict) { string str=s.substr(first,last-first+1); if(wordDict.count(str)) return 1; else return 0; }};

转载地址:http://eualo.baihongyu.com/

你可能感兴趣的文章
Spring Boot 的 10 个核心模块
查看>>
我30岁了,转行学编程可以吗? 排除法告诉你答案
查看>>
Python进阶:全面解读高级特性之切片!
查看>>
社交大战升级,语音新物种“听途听app”获数百万天使轮融资
查看>>
C#并行开发_Thread/ThreadPool, Task/TaskFactory, Parallel
查看>>
主要的编程范型
查看>>
Centos-Mysql复制备份还原数据库
查看>>
Javascript操作DOM常用API总结
查看>>
零基础入门—网站建站教程(新手必备)
查看>>
小鹏汽车开设六城服务中心,今年内将交付4万辆车,运营200座超充站
查看>>
C++面向对象高级编程(上) 第一周 侯捷
查看>>
整理位运算
查看>>
传核桃编程获高瓴领投新一轮融资,金额超亿元
查看>>
蚂蚁金服红蓝军技术攻防演练究竟有多“狠”
查看>>
go微服务框架go-micro深度学习(四) rpc方法调用过程详解
查看>>
HBase实战 | Hive数据导入云HBase
查看>>
No sleep, no sex, no life,程序员这次忍不了了
查看>>
Android 反编译的使用
查看>>
【翻译】asp.net core中使用MediatR
查看>>
Linux 安装Maven
查看>>