由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - M的面试题
相关主题
问个算法题:寻找两个点之间的所有路径这个题能有几种解法?
转划单词题的优解问一个word ladder的题目
leetcode wordladder2 求助!(solved)请教word ladder| |
求讨论关于Leetcode的WordLadder I的DFS解法leetcode word break II DFS 超时
请问一道题帮俺看一下代码DP+DFS为什么过不了work break II 那个大case : aaaaaaa...
Amazon电面纪实请教leetcode上的那道Word Break II,多谢!
大家G电面都是几轮?(附题目)问道G家的题
请教word ladder解法,大test超时这段word ladder II怎么改?
相关话题的讨论汇总
话题: dp话题: int话题: return话题: dict话题: len
进入JobHunting版参与讨论
1 (共1页)
c******3
发帖数: 5
1
输入一个词典termDict.txt,每行一个单词,同时输入一个不含空格的字符串,例如:
ilovethisgame,输出包含空格的英文句子,例如I love this game。
要求:
1, 编码实现该函数,如果有多种可能输出,输出所有可能
2, 建议先考虑整体流程,再进行优化,若时间有限,可使用部分伪代码
3, 分析并讨论:如果有多种可能输出,如何选择最有可能的输出
p*****2
发帖数: 21240
2
(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 []))
c******3
发帖数: 5
3
def y(l, r):
if(l>r):
return 1
if(a[l]>-1):
return a[l]
i=l
while i<=r:
if(s[l:i+1] in dict):
a[i]=y(i+1, r)
if(a[i]==1):
return 1
i+=1
return 0
f=open('termDict.txt')
dict=set()
for line in f:
dict.add(line.strip())
s='ilovethisgame'
a=len(s)*[-1]
y(0, len(s)-1)
k=0
c=[]
for i in range(len(a)):
if(a[i]==1):
c.append(s[k:i+1])
k=i+1
print c
f******n
发帖数: 53
4
如果是考虑多种组合,显然是DP算法。
构建dp[s.length][s.length]
根据dict设置dp[i][j] = 1 其中s[i...j]可以在dict中找到
dp每行会有多个1
根据ilovethisgame的静态算法如下
显示的a[i] 为每个word的第一个字母位置
void printpath (int a[13])
{
for (int i = 0; i < 13; i++)
printf("%d ", a[i]);
printf("n");
}
bool findAllPath(int dp[13][13], int a[13], int s, int e)
{
if (dp[s][e] == 1)
{
a[s]=1;
printpath(a);
return true;
}
int i = s;
bool found = false;
while (i <= e)
{
if (dp[s][i] == 1)
{
a[s]=1;
if (findAllPath(dp, a, i+1, e) == true)
found = true;
}
i++;
}
return found;
}
int _tmain(int argc, _TCHAR* argv[])
{
int dp[13][13];
for (int i = 0; i < 13; i++)
for (int j = 0; j < 13; j++)
dp[i][j]=0;
int a[13];
for (int i = 0; i < 13; i++)
a[i]=0;
dp[0][0] = 1;
dp[1][4] = 1;
dp[5][8] = 1;
dp[9][12] = 1;
findAllPath(dp, a, 0, 12);
return 0;
}
z*******h
发帖数: 346
5
你这个根本不是Dynamic Programming。你的dp table里的东西就没有被update. 你这
个还是brute force的 recursive solution.
其实这是个BFS or DFS可以解决的问题。

【在 f******n 的大作中提到】
: 如果是考虑多种组合,显然是DP算法。
: 构建dp[s.length][s.length]
: 根据dict设置dp[i][j] = 1 其中s[i...j]可以在dict中找到
: dp每行会有多个1
: 根据ilovethisgame的静态算法如下
: 显示的a[i] 为每个word的第一个字母位置
: void printpath (int a[13])
: {
: for (int i = 0; i < 13; i++)
: printf("%d ", a[i]);

o*****n
发帖数: 189
6
leetcode word break II
w********s
发帖数: 1570
7
错,要记录下已知的break
awarehouseisawarehouse
awarehouse = aware house, a ware house, a warehouse
isawarehouse = is a warehouse, is a ware house
isawarehouse已知的break不需要在下次继续求。

【在 z*******h 的大作中提到】
: 你这个根本不是Dynamic Programming。你的dp table里的东西就没有被update. 你这
: 个还是brute force的 recursive solution.
: 其实这是个BFS or DFS可以解决的问题。

z*******h
发帖数: 346
8
他的code中哪里记录下已知的break了?

【在 w********s 的大作中提到】
: 错,要记录下已知的break
: awarehouseisawarehouse
: awarehouse = aware house, a ware house, a warehouse
: isawarehouse = is a warehouse, is a ware house
: isawarehouse已知的break不需要在下次继续求。

l**********a
发帖数: 181
9
mark
1 (共1页)
进入JobHunting版参与讨论
相关主题
这段word ladder II怎么改?请问一道题
Course Schedule II DFS版Amazon电面纪实
话说今天面了一老印大家G电面都是几轮?(附题目)
offer报告 (附带找工作感言)请教word ladder解法,大test超时
问个算法题:寻找两个点之间的所有路径这个题能有几种解法?
转划单词题的优解问一个word ladder的题目
leetcode wordladder2 求助!(solved)请教word ladder| |
求讨论关于Leetcode的WordLadder I的DFS解法leetcode word break II DFS 超时
相关话题的讨论汇总
话题: dp话题: int话题: return话题: dict话题: len