分词问题分析
来源:互联网 发布:java 开发环境 编辑:程序博客网 时间:2024/05/29 03:08
题目来源,待字闺中,原创@陈利人 ,欢迎大家继续关注微信公众账号“待字闺中”
给定字符串,以及一个字典,判断字符串是否能够拆分为字段中的单词。例如,字段为{hello,world},字符串为hellohelloworld,则可以拆分为hello,hello,world,都是字典中的单词。
思想:最直接的思路就是递归,我们考虑每一个前缀,是否在字典中?如果在,则递归处理剩下的字串;如果不再,则考虑下一个前缀。写成表达式就是fun(i)=substr(i,j-i+1) && fun(j+1),其中i<=j<n-1,且substr(i,j-i+1)在字典中。很显然,该递归包含很多重复子问题,所以可以用动态规划,状态转移方程和上面类似,加速的原因是我们只计算一次子问题,即从后向前计算dp[i]=substr(s,j-i+1) && dp[j+1],具体代码如下:
bool dictionaryContain(const set<string>& strset,const string& str){set<string>::iterator iter = strset.find(str);if(iter != strset.end())return true;else return false;}bool wordBreak(const string& str,const set<string>& strset){int length = str.size();bool* dp = new bool[length+1];memset(dp,0,sizeof(bool)*(length+1));dp[length] = true;int i,j;for(i=length-1;i>=0;i--)//从后向前计算dp{for(j=i;j<=length;j++){if(dictionaryContain(strset,str.substr(i,j-i+1)) && dp[j+1])//状态转移方程{dp[i] = true;break;}}}return dp[0];}
以上只代表个人想法,如果有问题,请指出,谢谢
3 0
- 分词问题分析
- 分词问题;及最大乘积分析
- 分词问题
- baidu分词算法分析
- baidu分词算法分析
- 中文分词源代码分析
- baidu分词算法分析
- 百度分词算法分析
- baidu分词技术分析
- 关于分词的问题
- NLPIR分词乱码问题
- solr 配置IK分词器后只对第一个词搜索结果的问题分析
- baidu分词算法分析之一
- baidu分词算法分析之一
- lucene--分词器的分析
- 开源分词框架分析
- lucene--分词器的分析
- 庖丁分词的源码分析
- Swift中的标准函数
- 黑马程序员—反射的深入讲解
- 函数和堆栈
- C++继承中的内存布局
- Objective C--建造者模式
- 分词问题分析
- 长兴居民微信买菜
- 【Android应用开发】-Android 串口编程原理和实现方式
- springmvc+mybatis+c3p0 tomcat启动时报的错误,求解决方案
- Data input format and Data output format
- Android 多选列表
- 关于AChartengine点上显示数据的问题
- dede实现列表页隔行换色
- 黑马程序员—静态导入与编译器语法设置