Middle-题目92:139. 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=”leetcode”,dict=[“leet”,”code”]则可以。
题目分析:
方法一:朴素解法,超时。从字典中寻找能否匹配s的前缀,如果能,则向下搜索,如果不能,则退回来再找下一个能匹配s前缀的单词。因为字符串过长的时候,可能浪费很多时间在错误解上,故超时。
方法二:(动态规划,解法来自“快乐de胖虎”大神的博客)记dp[i]表示字符串s的前i个字符能否在字典中匹配,则初始化dp[0]=true,其余为false(规定任意字典都能表示空串),则转移方程如下:

(这东西怎么在LaTeX里面打出来。。。)
即前i个字符能否匹配取决于前j个字符能否匹配并且后i-j个字符在字典中,因此求以上表达式的析取。
源码:(language:java)

public class Solution {
  public boolean wordBreak(String s, Set<String> dict){
    int len = s.length();
    boolean[] arrays = new boolean[len+1];
    arrays[0] = true;
    for (int i = 1; i <= len; ++i){
      for (int j = 0; j < i; ++j){
        if (arrays[j] && dict.contains(s.substring(j, i))){
          // f(n) = f(0,i) + f(i,j) + f(j,n)
          arrays[i] = true;
          break;
        }
      }
    }
    return arrays[len];
  }
}

成绩:
12ms,beats 31.03%,众数12ms,24.67%
Cmershen的碎碎念:
初次看到此题想到的是贪心算法,即找到就向下搜,但若s=”abc”,dict=[“ab”,”a”,”bc”]时则会先搜到”ab”这个错误解,而朴素的回溯法在面对s=”aaaaaaaaaaaaaaaaaab”,dict=[“a”,”aa”,”aaa”,”aaaa”,”aaaaa”]时会陷入很慢的搜索,因为无论如何向下搜索都是错误解,且aaaaaaaaaaaaaaaaaa拆成若干a的组合有很多,算法都会遍历一遍,却不知字符b在字典里根本不存在。
不过此处提一个思考题,”aaaaaaaaaaaaaaaaaa”拆成1~5个a的连接的不同方法有多少种?
1-n个呢?

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### `.middle-wrap` 样式分析 #### `.middle-wrap>div` 该选择器用于直接子元素为 `<div>` 的 `.middle-wrap` 元素,定义了以下样式: - `padding-left: 0; padding-right: 10px;`:设置左侧内边距为 0,右侧为 10px,使得内容在左侧对齐,右侧留出空间[^3]。 - `color: #fff;`:文本颜色设置为白色。 - `text-align: center;`:文本内容水平居中显示。 - `height: 100px;`:固定高度为 100px。 ```css .middle-wrap>div { padding-left: 0; padding-right: 10px; color: #fff; text-align: center; height: 100px; } ``` #### `.middle-wrap>div>div` 该选择器针对 `.middle-wrap` 下的二级 `<div>` 元素,设置了固定高度为 100px,确保内部元素在垂直方向上占据相同空间,可能用于对齐或布局控制。 ```css .middle-wrap>div>div { height: 100px; } ``` #### `.middle-wrap h4` 该选择器作用于 `.middle-wrap` 中的 `<h4>` 标签,去除了默认的外边距内边距,并设置了字体大小为 22px,字体粗细为正常,用于统一标题样式。 ```css .middle-wrap h4 { margin: 0; padding: 5px 0; font-size: 22px; font-weight: normal; } ``` #### `.middle-wrap a` 该选择器用于 `.middle-wrap` 中的链接元素,将光标样式设置为指针,提示用户该元素可点击。 ```css .middle-wrap a { cursor: pointer; } ``` #### `.middle-wrap h4:before` 该伪元素在 `<h4>` 标签前插入一个空白内容,设置为 `inline-block` 显示模式,宽度高度均为 38px,右侧外边距为 10px,通常用于添加图标或装饰性元素。 ```css .middle-wrap h4:before { content: ""; display: inline-block; width: 38px; height: 38px; margin-right: 10px; } ``` #### `.middle-wrap h4 span` 该选择器作用于 `<h4>` 标签内的 `<span>` 元素,设置其为相对定位,顶部偏移 -6px,用于微调内部文本或图标的垂直位置。 ```css .middle-wrap h4 span { position: relative; top: -6px; } ``` #### `.middle-wrap p` 该选择器用于 `.middle-wrap` 中的段落 `<p>` 元素,设置字体大小为 40px,字体加粗,无外边距,行高为 40px,确保文本在垂直方向上居中显示。 ```css .middle-wrap p { font-size: 40px; font-weight: bold; margin: 0; line-height: 40px; } ``` #### `.middle-wrap h5` 该选择器作用于 `.middle-wrap` 中的 `<h5>` 标签,去除默认外边距,设置内边距为上下 20px 5px,行高为 20px,透明度为 0.75,字体大小为 14px,用于副标题或说明性文本。 ```css .middle-wrap h5 { margin: 0; padding: 20px 0 5px; line-height: 20px; opacity: 0.75; font-size: 14px; } ``` ### 功能总结 这些样式定义了一个具有固定高度视觉层次的容器 `.middle-wrap`,其中包含多个子元素,如标题、段落链接,每个元素都有明确的布局视觉表现。整体设计旨在创建一个视觉上统一、内容居中且易于阅读的区块,适用于卡片式布局或信息展示区域。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值