美文网首页
lintcode-单词切分

lintcode-单词切分

作者: 鬼谷神奇 | 来源:发表于2016-05-31 15:19 被阅读162次

C++版

给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。
动态规划的本质:根据已知结论推理未知结论

class Solution {
public:
    /**
     * @param s: A string s
     * @param dict: A dictionary of words dict
     */
    bool wordBreak(string s, unordered_set<string> &dict)
    {
        if(s.size() == 0 && dict.size() == 0)
            return true;
        if(s.size() == 0 || dict.size() == 0)
            return false;
    
        int len = (int)s.size();
        bool * dp = new bool[len+1];
        dp[0] = true;
    
        for(int i = 0; i <= len; ++i)
        {
            if(!dp[i])
                continue;
            unordered_set<string>::iterator it;
            for(it = dict.begin(); it != dict.end(); ++it)
            {
                string value = *it;
                int lv = (int)value.size();
                if(i+lv > len)
                    continue;
                string last = s.substr(i, lv);
                if(last == value)
                    dp[i+lv] = true;
            }
        }
    
        return dp[len];
    }
};

Java版

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()];
    }
    
}

相关文章

  • lintcode-单词切分

    C++版 给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。动态规划的本质...

  • LintCode 单词切分

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

  • 单词切分(LintCode)

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

  • lintcode-单词接龙I

    给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列比如:每次只能改变一个字母。变...

  • Tyger单词发音、切分

    香蕉测试ba-na-na1-2-3,你猜对了吗?

  • 新概念第五次课---摸清代词的门道

    一。 开篇章节:语法词尾单词的切分发音,先把词尾()起来,再切分音节。 语法词尾常见的有:-s, -es, -ed...

  • 搜索笔记 ---- 1

    分词 完全切分 完全切分指的是,找出一段文本中的所有单词。 商品和服务 - > 商 商品 品 和 和服 服 服务 ...

  • 58、索引管理_修改分词器以及定制自己的分词器

    1、默认的分词器 standardstandard tokenizer:以单词边界进行切分standard tok...

  • 999 - Elasticsearch Analysis 03

    Word Oriented Tokenizers 下面的tokenizer主要用来切分文本为单个单词。 Stand...

  • 使用Python将文本按标点整句切分

    利用分词工具包例如jieba可以轻易的将句子切分为不同的单词,但是当你有切分整句的需求时,该怎么解决呢? 将段落按...

网友评论

      本文标题:lintcode-单词切分

      本文链接:https://www.haomeiwen.com/subject/yyenrttx.html