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个呢?

这是一段 CSS 样式表的代码,定义了一种名为 `hvr-grow-shadow` 的样式类,它包含了两个 CSS 选择器:`.hvr-grow-shadow` 和 `.hvr-grow-shadow:hover, .hvr-grow-shadow:focus, .hvr-grow-shadow:active`。 在 `.hvr-grow-shadow` 选择器,定义了以下样式: - `display: inline-block;` 表示将元素设置为内联块元素,使其可以像文本一样在一行内显示。 - `vertical-align: middle;` 表示将元素垂直居对齐。 - `-webkit-transform: perspective(1px) translateZ(0);` 和 `transform: perspective(1px) translateZ(0);` 表示开启 3D 变换,并将元素转换为透视视角,以便后续的变换效果更加明显。 - `box-shadow: 0 0 1px rgba(0, 0, 0, 0);` 表示设置元素的阴影效果,此处的阴影为透明的,即不显示任何阴影。 - `-webkit-transition-duration: 0.3s;` 和 `transition-duration: 0.3s;` 表示设置过渡动画的持续时间为 0.3 秒。 - `-webkit-transition-property: box-shadow, transform;` 和 `transition-property: box-shadow, transform;` 表示设置过渡动画的属性为 `box-shadow` 和 `transform`,即在这两个属性上应用过渡动画效果。 在 `.hvr-grow-shadow:hover, .hvr-grow-shadow:focus, .hvr-grow-shadow:active` 选择器,定义了以下样式: - `box-shadow: 0 10px 10px -10px rgba(0, 0, 0, 0.5);` 表示将元素的阴影效果设置为有颜色有模糊的效果,即在元素下方产生一个阴影,并且阴影颜色为黑色,透明度为 0.5。 - `-webkit-transform: scale(1.1);` 和 `transform: scale(1.1);` 表示将元素放大到原来的 1.1 倍,以增强交互效果。 这些样式可以应用于 HTML 元素,并且当鼠标悬停在元素上、元素获得焦点或元素被激活时,会触发相应的过渡动画效果,使元素更加具有交互性和动态感。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值