lintcode:单词切分

单词切分

给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。

样例

s = "lintcode"

dict = ["lint","code"]

返回 true 因为"lintcode"可以被空格切分成"lint code"

解题

DFS

import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
// write your code here
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        Main m = new Main();
        while(in.hasNext()){
            String s = in.nextLine();
            String[] str = in.nextLine().split(" ");
            Set<String> dict = new TreeSet<String>();
            for(int i = 0;i<str.length;i++)
                dict.add(str[i]);
            int start = 0;
            boolean flag = m.wordBreak(s, dict, start);
            System.out.println(flag);
        }
    }
    public boolean wordBreak(String s,Set<String> dict,int start){

      if((s==null ||s.length() ==0) && (dict == null || dict.size()==0))
        return true;

        Iterator it = dict.iterator();
        if(start == s.length())
            return true;
        while(it.hasNext()){
            String t = (String)it.next();
            int end = start + t.length();
            if(end > s.length())
                continue;
            if(s.substring(start,end).equals( t )){
                if(wordBreak(s,dict,end)){
                    return true;
                }
            }
        }
        return false;
    }
}

95%数据运行超时

动态规划求解

定义数组dp dp[i] =true表示 字符串 s 子串0 - (i-1)在字典中存在

当dp[s.length()] == true 时候表示可以由字典内的单词组成s

public class Solution {
    /**
     * @param s: A string s
     * @param dict: A dictionary of words dict
     */
    public boolean wordBreak(String s, Set<String> dict) {
        // write your code here
        if((s==null ||s.length() ==0) && (dict == null || dict.size()==0))
            return true;
        return wordBreak(s,dict,0);
    }
     public boolean wordBreak(String s,Set<String> dict,int start){
        boolean dp[] = new boolean[s.length() + 1];
        dp[0] = true;//初始值
        for(int i = 0;i<s.length();i++){
            if(!dp[i])
                continue;
            for(String t:dict){
                int len = t.length();
                int end = i+ len;
                if(end > s.length())
                    continue;
                if(s.substring(i,end).equals(t)){
                    dp[end] = true;
                }
            }
        }
        return dp[s.length()];
    }

}
时间: 2024-08-25 13:31:38

lintcode:单词切分的相关文章

lintcode 单词接龙II

题意 给出两个单词(start和end)和一个字典,找出所有从start到end的最短转换序列 比如: 1.每次只能改变一个字母. 2.变换过程中的中间单词必须在字典中出现. 注意事项 所有单词具有相同的长度. 所有单词都只包含小写字母. 样例 给出数据如下: start = "hit" end = "cog" dict = ["hot","dot","dog","lot","

LintCode 单词搜索Ⅱ 字典树

今天做了道有意思的题目,题目要解出来不难,但看到他的提示 发现这道题我一开始并没有用到字典树 然后就使用字典树+DFS写了一遍,也算是巩固下字典树的相关知识 题目:原题地址 给出一个由小写字母组成的矩阵和一个字典.找出所有同时在字典和矩阵中出现的单词.一个单词可以从矩阵中的任意位置开始,可以向左/右/上/下四个相邻方向移动. 样例 给出矩阵: doafagaidcan 和字典: {"dog", "dad", "dgdg", "can&q

第六篇:Eclipse上运行第一个Hadoop实例 - WordCount(单词统计程序)

需求 计算出文件中每个单词的频数.要求输出结果按照单词的字母顺序进行排序.每个单词和其频数占一行,单词和频数之间有间隔. 比如,输入两个文件,其一内容如下: hello world hello hadoop hello mapreduce 另一内容如下: bye world bye hadoop bye mapreduce 对应上面给出的输入样例,其输出样例为: bye   3 hadoop 2 hello 3 mapreduce 2 world 2 方案制定 对该案例,可设计出如下的MapRe

MapReduce 应用案例分析 - 单词计数

需求 计算出文件中每个单词的频数.要求输出结果按照单词的字母顺序进行排序.每个单词和其频数占一行,单词和频数之间有间隔. 比如,输入一个文件,其内容如下: hello world hello hadoop hello mapreduce 对应上面给出的输入样例,其输出样例为: hadoop 1 hello 3 mapreduce 1 world 1 方案制定 对该案例,可设计出如下的MapReduce方案: 1. Map阶段各节点完成由输入数据到单词切分的工作 2. shuffle阶段完成相同单

三:Storm设计一个Topology用来统计单词的TopN的实例

Storm的单词统计设计 一:Storm的wordCount和Hadoop的wordCount实例对比 二:Storm的wordCount的方案实例设计 三:建立maven项目,添加maven相关依赖包(1)输入:search.maven.org网址,在其中找到storm的核心依赖(2)将核心依赖添加到pom.xml文件中 <dependency>            <groupId>com.github.aloomaio</groupId>            

Eclipse上运行第一个Hadoop实例 - WordCount(单词统计程序)

需求 计算出文件中每个单词的频数.要求输出结果按照单词的字母顺序进行排序.每个单词和其频数占一行,单词和频数之间有间隔. 比如,输入一个文件,其内容如下: hello world hello hadoop hello mapreduce 对应上面给出的输入样例,其输出样例为: hadoop 1 hello 3 mapreduce 1 world 1 方案制定 对该案例,可设计出如下的MapReduce方案: 1. Map阶段各节点完成由输入数据到单词切分的工作 2. shuffle阶段完成相同单

Storm设计一个Topology用来统计单词的TopN的实例

Storm的单词统计设计 一:Storm的wordCount和Hadoop的wordCount实例对比 二:Storm的wordCount的方案实例设计 三:建立maven项目,添加maven相关依赖包(1)输入:search.maven.org网址,在其中找到storm的核心依赖(2)将核心依赖添加到pom.xml文件中 <dependency>            <groupId>com.github.aloomaio</groupId>            

彻底解密WordCount运行原理(DT大数据梦工厂)

主要内容: 数据流动视角解密WordCount RDD依赖关系视角解密WordCount DAG与Lineage的思考 ==========数据流动视角============ 新建文件,里面输入 Hello Spark Hello Scala Hello Hadoop Hello Flink Spark is awesome 修改代码: package com.dt.spark.SparkApps.cores; import java.util.Arrays; import java.util

[转自老马的文章]用MODI OCR 21种语言

作者:马健邮箱:[email protected]发布:2007.12.08更新:2012.07.09按照<MODI中的OCR模块>一文相关内容进行修订2012.07.02按照新版Pdg2Pic的情况对内容进行补充2012.06.11标题从<在简体中文Office 2003下OCR繁体中文.日文.韩文>改为<用MODI OCR 21种语言> 目录1 安装MODI    1.1 Office 2003下安装MODI    1.2 Office 2007下安装MODI