题目:
给定一个字符串, 一个数组,判断这个字符串能否被分隔成字典里的一个个单词。
用动态规划算法
我面试时写的是下面的代码
public static boolean divied2(String s,String[] dict){
boolean result=false;
if(s.length()==0)
return true;
for (int i = 0; i < dict.length; i++) {
int index=s.indexOf(dict[i]);
if (index!=-1) {
System.out.println(index);
String tmp1=s.substring(0,index);
String tmp2=s.substring(index+dict[i].length(),s.length());
return divied(tmp1+tmp2,dict);
}
}
return result;
}
但是对于测试用例
String[] dict={
"百度一","百度","一下","我就","知","道"};
System.out.println(divied2("百度一下我就知道", dict));
这个是不通过的。因为百度一这个词先删除了,一下这个单词被破坏了,
回来想了一下,上面的原因是终止了遍历。经过改进后,测试通过
原题在于这个|=操作,也就是说对所有的结果进行或操作,有一个可以分隔完全就可以。
public static boolean divied(String s,String[] dict){

本文探讨了一道百度面试题,涉及如何使用动态规划算法判断字符串是否能被字典中的单词拆分。讨论了原算法存在的问题,如时间复杂度过高,并提出了多种优化策略,包括提前终止循环、删除已匹配的词、针对重复开头的词优化等。优化后的算法显著降低了函数执行次数,尤其是在字符串可完全分隔的情况下。
最低0.47元/天 解锁文章
1494

被折叠的 条评论
为什么被折叠?



