动态规划(0-1背包)---字符串按单词列表分割

字符串按单词列表分割

139. Word Break (Medium)

s = "leetcode",
dict = ["leet", "code"].
Return true because "leetcode" can be segmented as "leet code".

题目描述:

??给定一个字符串和一个单词数组,判断字符串是否能被单词数组中的单词分割

思路分析:

??dict 中的单词没有使用次数的限制,因此这是一个完全背包问题。该问题涉及到字典中单词的使用顺序,因此可理解为涉及顺序的完全背包问题。求解顺序的完全背包问题时,对物品的迭代应该放在最里层。dp[i]表示字符串的前i个字符能否由单词列表分割。

代码:

public boolean wordBreak(String s,List<String>wordDict){
    int n=s.length();
    boolean []dp=new boolean[n+1];
    dp[0]=true;
    for(int i=1;i<=n;i++){
        for(String word:wordDict){
            int len=word.length();
            if(len<=i&&word.equals(s.substring(i-len,i))){
                dp[i]=dp[i]||dp[i-len];
            }
        }
    }
    return dp[n];
}

原文地址:https://www.cnblogs.com/yjxyy/p/11121044.html

时间: 2024-08-21 21:36:19

动态规划(0-1背包)---字符串按单词列表分割的相关文章

动态规划—0/1背包

问题描述:每种物品仅有一件,wi代表物体i的重量,pi表示物体i的价值,物体不可拆分,可以选择放或不放.背包总容量M,求怎么放才能价值最大化? 分析: java代码: 1 public class Package01 { 2 3 //3个物体的重量 4 public static int[] m = {3,4,5}; 5 6 //物体的价值 7 public static int[] p = {4,5,6}; 8 9 //背包的总容量 10 public static int M = 10; 1

【算法学习笔记】39.字符串处理 单词分割 SJTU OJ 1302 缩进格式

1302. 缩进格式 Description 小z想和小y愉快的玩耍,但是小y在写程序.程序写好了,但是小y怎么调试也过不了.小z帮小y看了一下就不想看了,因为小y虽然是萌妹子,但是她的程序缩进实在是不忍直视.于是小z决定帮她纠正. 程序里的每一行语句分为单词和空格,ASCII码从33到126的一段连续字符串是单词,而单词之间由ASCII码为32的空格分开.小z的缩进方法具体来说是这样:对于每一行的第 i 个单词,它的第一个字符的位置不能小于其它每一行的第 1 至第 i−1 个单词,且每个单词的

统计字符串中单词的个数

1.单纯统计单词个数,单词与单词之间只考虑空格的情况 // word_statistic.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <string> using namespace std; #define M 10000 #define N 20 int _tmain(int argc, _TCHAR* argv[]) { char str1[M]={0};

【C语言】写一个函数,实现字符串内单词逆序

//写一个函数,实现字符串内单词逆序 //比如student a am i.逆序后i am a student. #include <stdio.h> #include <string.h> #include <assert.h> void reverse_string(char *left, char *right) //连续的字符串逆序 { char temp; while (right > left) { temp = *left; *left = *rig

初识python(条件判断、循环控制、循环次数限制、常用数据类型、字符串格式化、列表常用操作、二进制运算、嵌套循环)

第一天学习 1.pycharm使用遇到的问题: 如果想运行程序A,一定要右键去执行程序A,而不能直接左下角run,那样的话可能会出现运行之前其他程序 pycharm小技巧: 1.多行全选,shift+tab整体往前缩进一个tab 2.多行全选,tab整体向后缩进一个tab 3.多行全选,ctrl+/注释所选代码,再次按ctrl+/注释取消所选代码 4.pycharm中切换3.5和2.7:file菜单-settings-project pycharmPreject--project interpr

输出一串字符串中单词个数

#include <stdio.h> #include <stdlib.h> /* 输入一行字符串(单词和若干空格), 输出该行单词个数. */ int main(){ char ch, str[100]; int count = 0; gets(str); for (int j = 0; str[j] != '\0';++ j) if ((str[j + 1] == '\0') && (str[j] != ' ')) //到达末尾且不为空格,单词数+1 count

字符串之“统计一个字符串中单词的个数”

题目:统计一个字符串中单词的个数 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开 输入:my name is jacky 输出:the number of word is 4 代码如下: #include <stdio.h> int main(int argc, char *argv[]) { char str[80]; int i=0,num=0,flag=0; char c; gets(str); while((c=str[i])!='\0') { if(c==' ') flag

使用SQL如何把用逗号等字符隔开的字符串转换成列表(转)

如何把用逗号等字符隔开的字符串转换成列表,下面依逗号分隔符为例: 比如有一个字符串,其值为:香港,张家港,北京,上海用SQL把这个字符串转换成列表的方法是: 1.方法一 WITH A AS (SELECT '香港,张家港,北京,上海' A FROM DUAL) SELECT DECODE(B,0,SUBSTR(A,C),SUBSTR(A,C,B-C)) city FROM ( SELECT A,B,(LAG(B,1,0) OVER(ORDER BY LV))+1 C FROM( SELECT A

动态规划之01背包

动态规划的基本思想: 将一个问题分解为子问题递归求解,且将中间结果保存以避免重复计算.通常用来求最优解,且最优解的局部也是最优的.求解过程产生多个决策序列,下一步总是依赖上一步的结果,自底向上的求解. 动态规划算法可分解成从先到后的4个步骤: 1. 描述一个最优解的结构,寻找子问题,对问题进行划分. 2. 定义状态.往往将和子问题相关的各个变量的一组取值定义为一个状态.某个状态的值就是这个子问题的解(若有k个变量,一般用K维的数组存储各个状态下的解,并可根    据这个数组记录打印求解过程.).