由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 大家帮我看看这个程序哪里有问题啊!!
相关主题
leetcode 129这段word ladder II怎么改?
一道电面题,分享下, 这个题应该用哪几个data structure?话说今天面了一老印
Java programming questionword ladder ii 谁给个大oj不超时的?
leetcode word break II DFS 超时帮忙看道题:[leetcode] word break
讨论一道G的题find longest substring which contains just two unique characters.4sum o(n^2)超时
请教word ladder| |杯具!越改越差
leetcode的新题是1337c0d3r本人在更新吗?贡献一道题
WordLadderII 看到很多解法比较长。 抛砖引玉,求更简洁解法。请教:这个10来行的leetcode程序有什么问题?
相关话题的讨论汇总
话题: string话题: vs话题: return话题: helper
进入JobHunting版参与讨论
1 (共1页)
B********t
发帖数: 147
1
题目:找dict中最长的单词,这个单词必须由dict里的单词组成。
bool myfunc(string s1, string s2)
{
return (s1.size() > s2.size());
}
bool findLongestWord_helper(string &s, map &hm)
{
for(int i = 1; i <= s.size(); i++)
{
string sub_f(s, 0, i);
if(hm[sub_f])
{
if(i == s.size())
return true;
string sub_b(s, i, s.size()-i);
if(findLongestWord_helper(sub_b, hm))
return true;
}
}
return false;
}
string findLongestWord(vector &vs)
{
string result("");
sort(vs.begin(), vs.end(), myfunc);
map hashmap;
for(int i = 0; i < vs.size(); i++)
hashmap[vs[i]] = true;

for(int i = 0; i < vs.size(); i++)
{
hashmap[vs[i]] = false;//加上这句就好了
if(findLongestWord_helper(vs[i], hashmap))
{
result = vs[i];
break;
}
}
return result;
}
c********t
发帖数: 5706
2
为什么这么复杂?还要用hashmap? 直接扫一遍不行吗?

【在 B********t 的大作中提到】
: 题目:找dict中最长的单词,这个单词必须由dict里的单词组成。
: bool myfunc(string s1, string s2)
: {
: return (s1.size() > s2.size());
: }
: bool findLongestWord_helper(string &s, map &hm)
: {
: for(int i = 1; i <= s.size(); i++)
: {
: string sub_f(s, 0, i);

e****e
发帖数: 418
3
小骑士和冷骑士,双骑相逢!
d*********g
发帖数: 154
4
for(int i = 0; i < vs.size(); i++)
{
if(findLongestWord_helper(vs[i], hashmap))
{
result = vs[i];
break;
}
}
为什么这里break了?不是要找最长的么?你这里只是找到一个由dict里面的单词构成
的单词之后就break了吧?
B********t
发帖数: 147
5
求问一遍怎么扫

【在 c********t 的大作中提到】
: 为什么这么复杂?还要用hashmap? 直接扫一遍不行吗?
B********t
发帖数: 147
6
我把dict sort了的 从最长的开始找 找到就可以退出了

【在 d*********g 的大作中提到】
: for(int i = 0; i < vs.size(); i++)
: {
: if(findLongestWord_helper(vs[i], hashmap))
: {
: result = vs[i];
: break;
: }
: }
: 为什么这里break了?不是要找最长的么?你这里只是找到一个由dict里面的单词构成
: 的单词之后就break了吧?

g*********n
发帖数: 43
7
这两句放在循环里面好像有点奇怪:
for(int i = 1; i <= s.size(); i++)
{
. . .
{
if(s.size() == 0)
return true;
既然i从1开始, 那么(s.size() == 0) 就不会为true?
c********t
发帖数: 5706
8
haha, my baby 骑士.
下面这样难道不行?我不会c++, 大概写的。是我没读懂题吗?
string findLongestWord(vector &vs)
{
int maxlen=0;
string longest="";
for(int i=0; i< vs.size(); i++){
if(vs[i].length > maxlen){
maxlen=vs[i].length;
longest=vs[i];
}
}
return longest;
}

【在 B********t 的大作中提到】
: 求问一遍怎么扫
e****e
发帖数: 418
9
"题目:找dict中最长的单词,这个单词必须由dict里的单词组成。"
是这个单词必须由dict里的<<其他>>单词组成?
例如:dict: foot, ball, football, basketball
result: football
请问小骑士是这样的末?

【在 c********t 的大作中提到】
: haha, my baby 骑士.
: 下面这样难道不行?我不会c++, 大概写的。是我没读懂题吗?
: string findLongestWord(vector &vs)
: {
: int maxlen=0;
: string longest="";
: for(int i=0; i< vs.size(); i++){
: if(vs[i].length > maxlen){
: maxlen=vs[i].length;
: longest=vs[i];

c********t
发帖数: 5706
10
好像弄明白你的题意了。虽然我不懂c++,不过我觉得你的问题是,findLongestWord_
helper又想split to several words才能true, 又想如果剩一个词也要true
看看改成下面的行不
bool findLongestWord_helper(string &s, map &hm,bool hasSplit)
{
for(int i = 1; i <= s.size(); i++)
{
string sub_f(s, 0, i);
if(hm[sub_f])
{
if(i==s.size() ) return hasSplit;
string sub_b(s, i, s.size()-i);
if(findLongestWord_helper(sub_b, hm, true))
return true;
}
}
return false;
}
再继续说说,我的一点建议
1. c++没有hashset吗?如果有,应该把map换成set
2. 凡是findLongestWord_helper返回结果为true的都应该存在一个hashset里,这个
hashset 就是由dict里的单词组成的单词的cache,避免重复计算。

★ 发自iPhone App: ChineseWeb 7.8
★ 发自iPhone App: ChineseWeb 7.8

【在 B********t 的大作中提到】
: 题目:找dict中最长的单词,这个单词必须由dict里的单词组成。
: bool myfunc(string s1, string s2)
: {
: return (s1.size() > s2.size());
: }
: bool findLongestWord_helper(string &s, map &hm)
: {
: for(int i = 1; i <= s.size(); i++)
: {
: string sub_f(s, 0, i);

相关主题
请教word ladder| |这段word ladder II怎么改?
leetcode的新题是1337c0d3r本人在更新吗?话说今天面了一老印
WordLadderII 看到很多解法比较长。 抛砖引玉,求更简洁解法。word ladder ii 谁给个大oj不超时的?
进入JobHunting版参与讨论
j******2
发帖数: 362
11
是150里那道吗?
B********t
发帖数: 147
12
啊。。。。我知道我错在哪了。。。 我应该只检查其它的单词 原代码所有单词
都检查了所以不管怎么样都会返回true....... thanks啦!

【在 e****e 的大作中提到】
: "题目:找dict中最长的单词,这个单词必须由dict里的单词组成。"
: 是这个单词必须由dict里的<<其他>>单词组成?
: 例如:dict: foot, ball, football, basketball
: result: football
: 请问小骑士是这样的末?

B********t
发帖数: 147
13
噢 是的 我已经改过来了 是当i == s.size() 时就可以退出了 typo 我最初的
问题不是出在这里 是出在我连这个单词本身也检查了 所以永远都会返回true

【在 g*********n 的大作中提到】
: 这两句放在循环里面好像有点奇怪:
: for(int i = 1; i <= s.size(); i++)
: {
: . . .
: {
: if(s.size() == 0)
: return true;
: 既然i从1开始, 那么(s.size() == 0) 就不会为true?

B********t
发帖数: 147
14
小冷骑士 多谢建议 我也刚学c++不久
c++里有set和map set是avl树实现的 map是红黑树实现的 为什么这里要用set而不
是map呢?
如果用set就是这样
bool myfunc(string s1, string s2)
{
return (s1.size() > s2.size());
}
bool findLongestWord_helper(string &s, set &hs)
{
for(int i = 1; i <= s.size(); i++)
{
string sub_f(s, 0, i);
if(hs.find(sub_f) != hs.end())
{
if(i == s.size())
return true;
string sub_b(s, i, s.size()-i);
if(findLongestWord_helper(sub_b, hs))
return true;
}
}
return false;
}
string findLongestWord(vector &vs)
{
string result("");
sort(vs.begin(), vs.end(), myfunc);
set hashset;
for(int i = 0; i < vs.size(); i++)
hashset.insert(vs[i]);
for(int i = 0; i < vs.size(); i++)
{
hashset.erase(vs[i]);
if(findLongestWord_helper(vs[i], hashset))
{
result = vs[i];
break;
}
hashset.insert(vs[i]);
}
return result;
}

hasSplit)

【在 c********t 的大作中提到】
: 好像弄明白你的题意了。虽然我不懂c++,不过我觉得你的问题是,findLongestWord_
: helper又想split to several words才能true, 又想如果剩一个词也要true
: 看看改成下面的行不
: bool findLongestWord_helper(string &s, map &hm,bool hasSplit)
: {
: for(int i = 1; i <= s.size(); i++)
: {
: string sub_f(s, 0, i);
: if(hm[sub_f])
: {

B********t
发帖数: 147
15
恩 好像150里也有这道 是google的面试题吧

【在 j******2 的大作中提到】
: 是150里那道吗?
c********t
发帖数: 5706
16
节省空间啊,map里面的value沒有用。另外我在我写的codes里改了一个bug. 现在应该
行了。

★ 发自iPhone App: ChineseWeb 7.8

【在 B********t 的大作中提到】
: 小冷骑士 多谢建议 我也刚学c++不久
: c++里有set和map set是avl树实现的 map是红黑树实现的 为什么这里要用set而不
: 是map呢?
: 如果用set就是这样
: bool myfunc(string s1, string s2)
: {
: return (s1.size() > s2.size());
: }
: bool findLongestWord_helper(string &s, set &hs)
: {

1 (共1页)
进入JobHunting版参与讨论
相关主题
请教:这个10来行的leetcode程序有什么问题?讨论一道G的题find longest substring which contains just two unique characters.
给定字符串,求其不出现重复字符的子字符串的最大长度请教word ladder| |
G题讨论leetcode的新题是1337c0d3r本人在更新吗?
问个MSFT的题WordLadderII 看到很多解法比较长。 抛砖引玉,求更简洁解法。
leetcode 129这段word ladder II怎么改?
一道电面题,分享下, 这个题应该用哪几个data structure?话说今天面了一老印
Java programming questionword ladder ii 谁给个大oj不超时的?
leetcode word break II DFS 超时帮忙看道题:[leetcode] word break
相关话题的讨论汇总
话题: string话题: vs话题: return话题: helper