Redian新闻
>
Re: 李10年进去后会不会被爆菊?
avatar
Re: 李10年进去后会不会被爆菊?# Joke - 肚皮舞运动
a*e
1
请教leetcode上的那道Word Break II
Given a string s and a dictionary of words dict, add spaces in s to
construct a sentence where each word is a valid dictionary word.
Return all such possible sentences.
For example, given
s = "catsanddog",
dict = ["cat", "cats", "and", "sand", "dog"].
A solution is ["cats and dog", "cat sand dog"].
http://oj.leetcode.com/problems/word-break-ii/
Can anyone tell me why the following code generated Memory Limit Exceeded? I
tested it in VS for that catsanddog string, which works.
class Solution { public: vector wordBreak(string s, unordered_set &dict) {
int len = s.length();
bool *can =new bool[len+1];
can[0] = true;
for (int i=1;ican[i]=false;
vector> dp(len+1, vector());
dp[0].push_back("");
string str;
for (int i=1; i<=len; i++)
for (int j=0;j{
str = s.substr(j,i-j);
if (can[j]&&dict.find(str)!=dict.end())
{
can[i]=true;
string empty;
if (j>0) empty = " ";
for (int idx=0; idx{
string n = dp[j][idx] + empty + str;
dp[i].push_back(n);
}
}
}
return dp[len];
}
};
avatar
N*m
2
【 以下文字转载自 Military 讨论区 】
发信人: jigao (左季高), 信区: Military
标 题: Re: 李10年进去后会不会被爆菊?
发信站: BBS 未名空间站 (Thu Sep 26 14:59:28 2013, 美东)
李天一 李天* 李天o 李天0 李天O 李天〇
avatar
h*6
3
自己调试吧
avatar
x*g
4
没理解错的话,你这个算了所有位置作为结束的所有有效分割.
重复记录了所有中间结果,内存超标不意外?
还是DFS吧.
BTW: 这个can没用,直接判!dp[j].empty()即可.
avatar
a*e
5
多谢,我再想想。请问哪位大侠有DFS的例子么?还有,有时候有思路,但要落实到
code上觉得比较难,有大侠支招一下么?再次感谢!
avatar
s*x
6
public ArrayList wordBreak(String s, Set dict) {
Map> memorized = new HashMapArrayList>();
return breakIntoWordList(s, dict, memorized);
}

private ArrayList breakIntoWordList(String s, Set dict,
Map> memorized) {
ArrayList result = new ArrayList();
if (s == null || s.length() == 0) {
return result;
}

if (memorized.containsKey(s)) {
return memorized.get(s);
}

for (int i = 1; i <= s.length(); i++) {
String prefix = s.substring(0, i);
if (dict.contains(prefix)) {
if (i == s.length()) { // whole string is word
result.add(s);
memorized.put(s, result);
return result;
}

String suffix = s.substring(i, s.length());
ArrayList segSuffix = breakIntoWordList(suffix, dict
, memorized);
for (String suffixWord : segSuffix) {
result.add(String.format("%s %s", prefix, suffixWord));
}
}
}

memorized.put(s, result);
return result;
}

【在 a***e 的大作中提到】
: 多谢,我再想想。请问哪位大侠有DFS的例子么?还有,有时候有思路,但要落实到
: code上觉得比较难,有大侠支招一下么?再次感谢!

avatar
a*e
7
再请问为啥下面这个程序就没有 Memory Limit Exceeded呢?我怎么觉得做法差不多,
只不过这个程序是从后往前做的?
vector wordBreak(string s, unordered_set &dict) {
int len = s.length();
vector dp(len + 1,false);
vector > dp2(len + 1,vector());
dp2[len].push_back("");
dp[len] = true;
for (int i = len - 1; i >= 0; i--) {
for (int j = i; j < len; j++) {
string str = s.substr(i,j - i + 1);
if (dict.find(str) != dict.end() && dp[j + 1]) {
dp[i] = true;
for (int index = 0; index < dp2[j + 1].size(); index++) {
string empty = "";
if (j + 1 != len) empty = " ";
string n = str + empty + dp2[j + 1][index];
dp2[i].push_back(n);
}
}
}
}
return dp2[0];
}
avatar
p*2
8
(def dict #{"cat", "cats", "and", "sand", "dog"})
(defn word-break [str]
(
(fn dfs [str, p, res]
(if (= p (count str))
(println res)
(loop [end (inc p)]
(when (<= end (count str))
(let [word (subs str p end)]
(when (contains? dict word)
(dfs str end (conj res word)))
(recur (inc end)))))))
str 0 []))
(word-break "catsanddog")
avatar
l*a
9
写得真好

【在 p*****2 的大作中提到】
: (def dict #{"cat", "cats", "and", "sand", "dog"})
: (defn word-break [str]
: (
: (fn dfs [str, p, res]
: (if (= p (count str))
: (println res)
: (loop [end (inc p)]
: (when (<= end (count str))
: (let [word (subs str p end)]
: (when (contains? dict word)

avatar
a*e
10
请大牛peking2能解释一下么?是pseudo code还是某种语言啊?狂汗。我对c++熟悉,
然后c#.......非常感谢。
avatar
j*i
11
都不会自己debug么?
avatar
a*e
12
Debug那个test case没有什么exceed memory啊,OJ又没给出哪个input会导致那种情况
。。。。。。。而且两种code跑了,看着都是一样的,一个能通过oj,另一个就不行。
。。。。。
avatar
p*2
13

clojure呀。学好了可以面groupon了.

【在 a***e 的大作中提到】
: 请大牛peking2能解释一下么?是pseudo code还是某种语言啊?狂汗。我对c++熟悉,
: 然后c#.......非常感谢。

avatar
l*a
14
只会java可以申吗?

【在 p*****2 的大作中提到】
:
: clojure呀。学好了可以面groupon了.

avatar
p*2
15

有点难度。

【在 l*****a 的大作中提到】
: 只会java可以申吗?
avatar
r*e
16
请问DFS和LZ方法的复杂度是不是一样的?

【在 x****g 的大作中提到】
: 没理解错的话,你这个算了所有位置作为结束的所有有效分割.
: 重复记录了所有中间结果,内存超标不意外?
: 还是DFS吧.
: BTW: 这个can没用,直接判!dp[j].empty()即可.

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