您的位置:首页 > 职场人生

面试:字符串: 提取单词(2)

2016-06-06 17:44 381 查看

题目

根据字典,从一个抹去空格的字符串里提取全部的单词组合,求单词组合里最大单词个数

算法

一般求最大数量而不求具体方案,DP

dp记录中间状态,dp[i]代表从0到i的子串包含的最大数量,程序最后返回dp[n-1], n为字符串的长度,dp计算的等式为

dp[j]=max(dp[j],dp[i]+1),从第i+1到第j个字符组成的字符串是一个单词

public class Solution{
public int segString(String s, HashSet<String> d){
if(s==null||s.length()==0)
return 0;
int[] dp=new int[s.length()]; //初始化为0

//记录从0带i的子串是否为字典里的单词
for(int i=0;i<s.length();i++){
String sub=s.substring(0,i+1);
if(d.contains(sub)){
dp[i]=1; //如果整个串是一个单词,则加1
}
}

for(int i=0;i<s.length()-1;i++){
for(int j=i+1;j<s.length();j++){
if(dp[i]>0){
//如果i之前的能分割成单词
//那么考虑i+1到j的情况
String sub=s.substring(i+1,j+1);
if(d.contains(sub)){
//如果i+1到j也是一个单词
//那么更新从i到j的最大单词数
dp[j]=Math.max(dp[j], dp[i]+1);
}
}
}
}

return dp[s.length()-1];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: