首页 > 作文

单词分割

更新时间:2023-04-03 01:44:40 阅读: 评论:0

给定一个字符串s,同时给定一个字典dict,判断字符串s是否可以被分割为一个个字典里面的单词,也就是判断字符串s是否有字典里面的单词链接而成的。

例如,给定:

三八妇女节放假

s = “leetcode”,

dict = [“lee沈浩日记t”, “code”].

则结果为真,因为字符串s可以分割为leet 和code两个合法单词。

1.普通方法

[html]

bool wordbreakhelper(string& str, t<string>& dict, int nstart)

{

if (nstart == str.length())

{

钢琴教学 return true;

}

for (t<string>::iterator iter=dict.begin(); iter != dict.end(); iter++)

{

int nlen = (*iter).length();

int nend = nstart + nlen;

if (nend > str.length())

{

//单词太长直接超过了str字符串剩余部分长度。因此不可能在字符串str中

continue;

}

if(str.substr(nstart,nlen) == *iter)

{

if (wordbreakhelper(str, dict, nstart+nlen))

{

return true;//想一想为什么这么递归

}

}

}

return fal;

}

时间负责度是o(n^2)。

2.动态规划的方法

用动态规划的方法来解决单词分割的关键是:

1、定义一个数组t[],t[i]==true代表字符串的前i个字符是可以用给定字典分割的。

2、数组的初始状态为t[0]==true。

[html]

bool wordbreak(string& str, t<string>& dict)

{

bool *bary = new bool[str.length()+1];//想一想为什么要加1

memt(bary,fal,str.length()+1);

bary[0] = true广场舞大全视频;

for (int i=0; i<str.length(); i++)

{

if (!bary[i])

{

continue;

}

//想一想为什么要在以i代表的位置为立足点对所有可能的单词进行扫描(这很必要)

for (t<string>::iterator iter = dict.begin(); iter!=dict.end(); iter++)

{

int nlen = (*iter).length();

int nend = i+nlen;

if (nend>str.length())

{

continue;

}

if (bary[nend])//想一想什么时候发生这种情况

{

continue;

}

if (str.substr(i,nlen) == *iter)

{

bary[nend] = true;

}

}

}

return bary[str.length()];

}

时间复杂度为o(str.length()*dict.size())。

即使是形如如下的特殊情况,该方法仍然能很好的进行判断字符串是否能被字典分割。

输入: “programcreek”, [“programcree”,”program”,”creek”].

3.更多有趣的问题

母爱的作文

动态规划的方法虽然可以判断一个字符串s是否可以被给定的字典里的单词分割,但却不能够获悉到底是分割成了什么哪些单词。那么如何解决这个问题呢?

一个可行的办法(from jk451)如下:

将数组布尔数组bary换做整形数组naray。

1、将bary[nend)=true替换为nary[nend)=i,这意味着当你找到一个0到nend位置的子串可分割时,你能够得到改子串分割成的最后单词是i到nend位置的字母所组成的单词;

2、如果断定字符串s能够分割成为字典中的单词,那么只需要检查nary[s.length()]里面的值,分割成的最后一个单词必然是从nary[s.length()]到s.length()-1的位置中的字母组合成的单词,重复这个过程,可以获得其它的单词。

一点补充:当然你会发现字符串s可分割情况并不是唯一的,例如,s=”nihaonihao“,字典dict={”ni”,”nihao”,”hao”}.此时可以分成{“nihao”,”nihao”}、{“ni”,”hao”,”nihao”}\…….等多种情况。

更多 0

上一篇寻找最长回文子串

本文发布于:2023-04-03 01:44:39,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b3b03f687647982134fca4c5d17ce336.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:单词分割.doc

本文 PDF 下载地址:单词分割.pdf

标签:单词   字符串   字典   数组
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图