Redian新闻
>
split a string into words in a dictionary这题有最坏情况比exponential 快的解法么?
avatar
split a string into words in a dictionary这题有最坏情况比exponential 快的解法么?# JobHunting - 待字闺中
k*r
1
split a string into words in a dictionary
我想到的不管是递归还是dp,最坏情况都要O(2^n).有在最坏情况还能维持多项式时间
的解法么?哪位说一下?
avatar
w*x
2
DP解法:
dpRec[strlen(str)]
dpRec[i]: if true, previous character can split to words
for (int i = 0; i < strLen; i++)
for (int j = i; j >=0 && !dpRec[i]; j--)
dpRec[i] = true if dpRec[j] && isWord(str[j..i])
时间复杂度O(n^2)
avatar
l*i
3
One question, can you use the same word in dict more than once?
if yes then wwwyhx gives correct solution.
avatar
k*r
4
same word应该可以用多次
对, wwwyhx 的算法可以在O(n^2)判断这个string能不能被合法split
但我有一个问题,如果是要打印出所有合法的split, 我觉得这个合法split本身的个
数就可能是exponential的,那怎么可能用多项式时间打印出来呢
avatar
w*o
5
通常dictionary是用什么数据结构表示的?我想这对解决本题关系很大吧?!
谢谢!

【在 k*******r 的大作中提到】
: split a string into words in a dictionary
: 我想到的不管是递归还是dp,最坏情况都要O(2^n).有在最坏情况还能维持多项式时间
: 的解法么?哪位说一下?

avatar
g*y
6
内层循环可以优化,字典里最长单词长度是个常数C
所以DP搜索只需要O(N)
但是收集答案可以是exponential, 因为答案空间就是那么大。

【在 w****x 的大作中提到】
: DP解法:
: dpRec[strlen(str)]
: dpRec[i]: if true, previous character can split to words
: for (int i = 0; i < strLen; i++)
: for (int j = i; j >=0 && !dpRec[i]; j--)
: dpRec[i] = true if dpRec[j] && isWord(str[j..i])
: 时间复杂度O(n^2)

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。