zoukankan      html  css  js  c++  java
  • [LeetCode] Word Break, Solution

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

    [Thoughts]

    一个DP问题。定义possible[i] 为S字符串上[0,i]的子串是否可以被segmented by dictionary.

    那么

    possible[i] = true      if  S[0,i]在dictionary里面

                    = true      if   possible[k] == true 并且 S[k+1,j]在dictionary里面, 0<k<i

                   = false      if    no such k exist.

     

    [Code]

    实现时前面加一个dummy节点,这样可以把三种情况统一到一个表达式里面。

    1 bool wordBreak(string s, unordered_set<string> &dict) {
    2 string s2 = '#' + s;
    3 int len = s2.size();
    4 vector<bool> possible(len, 0);
    5
    6 possible[0] = true;
    7 for(int i =1; i< len; ++i)
    8 {
    9 for(int k=0; k<i; ++k)
    10 {
    11 possible[i] = possible[k] &&
    12 dict.find(s2.substr(k+1, i-k)) != dict.end();
    13 if(possible[i]) break;
    14 }
    15 }
    16
    17 return possible[len-1];
    18 }
  • 相关阅读:
    一周的前端面试
    PHP导出超大的CSV格式的Excel表方案
    Java HashMap Demo
    Vmware 设置桥接模式
    Vue 模板
    SpringMVC 拦截器
    IntelliJ IDEA 修改缓存文件设置
    Maven 命令操作项目
    Maven 介绍
    Spring Boot 5 SpringSecurity身份验证
  • 原文地址:https://www.cnblogs.com/codingtmd/p/5078855.html
Copyright © 2011-2022 走看看