Redian新闻
>
不做死就不会死(多gif)
avatar
不做死就不会死(多gif)# Joke - 肚皮舞运动
A*t
1
算法一:DFS,当然aaaaaaaaaaaaaaaa就超时了。
算法二:DP, O(n^3), dp[i][len]纪录,每次查找O(n)。
算法三:DP, O(n^2), Java用HashSet,C++用unordered_set,理论上每次query是O(1)。
20行就写完了。
那么有没有小于这个的算法呢?比如严格o(n^2),O(nlogn)的.
avatar
p*g
2
avatar
s*x
3
can you post your code for n^2?
avatar
t*g
4
最后那个真死了?
avatar
h*n
5
bool wordBreak(string s, unordered_set &dict) {
int N = s.size();
vector dp(N+1, false);
dp[0] = true;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= i; j++) {
if (dp[i-j] && (dict.find(s.substr(i-j, j)) != dict.end())) {
dp[i] = true;
break;
}
}
return dp[N];
}
avatar
c*n
6
默片时代的产物
应该没死 不过那个年代不会蒙太奇 不会摆角度
搞的那些动作 成龙看了怕都要尿

【在 t*****g 的大作中提到】
: 最后那个真死了?
avatar
p*e
7
就我一外行来看,你这个不是dp呀。这个不就是O(n^2)的暴力解法嘛。不能因为变量名
字是dp,就叫dp算法吧。

><= i;="" j++)="" {="" :="" if="" (dp[i-j]="" &&="" (dict.find(s.substr(
i-j,="" j))="" !="dict.end()))" {="" :="" dp[i]="true;" :="" break;="" :=""
}="" :="" ...................="">

【在 h****n 的大作中提到】
: bool wordBreak(string s, unordered_set &dict) {
: int N = s.size();
: vector dp(N+1, false);
: dp[0] = true;
: for (int i = 1; i <= N; i++)
: for (int j = 1; j <= i; j++) {
: if (dp[i-j] && (dict.find(s.substr(i-j, j)) != dict.end())) {
: dp[i] = true;
: break;
: }

avatar
d*l
8
自行车上栏杆那个每次看了都蛋疼,虽然看过好多遍了
avatar
n*e
9
多么漂亮的前缀字符串 DP 被你说成了 暴力解法。。。

substr(
"

【在 p***e 的大作中提到】
: 就我一外行来看,你这个不是dp呀。这个不就是O(n^2)的暴力解法嘛。不能因为变量名
: 字是dp,就叫dp算法吧。
:
: ><= i;="" j++)="" {="" :="" if="" (dp[i-j]="" &&="" (dict.find(s.substr(
: i-j,="" j))="" !="dict.end()))" {="" :="" dp[i]="true;" :="" break;="" :=""
: }="" :="" ...................="">

avatar
G*Y
10
第一个为啥会爆炸呀?没看懂

【在 d*l 的大作中提到】
: 自行车上栏杆那个每次看了都蛋疼,虽然看过好多遍了
avatar
A*t
11
暴力的是dfs。这个算是DP了,每个位置搜到都记录下来。

substr(
"

【在 p***e 的大作中提到】
: 就我一外行来看,你这个不是dp呀。这个不就是O(n^2)的暴力解法嘛。不能因为变量名
: 字是dp,就叫dp算法吧。
:
: ><= i;="" j++)="" {="" :="" if="" (dp[i-j]="" &&="" (dict.find(s.substr(
: i-j,="" j))="" !="dict.end()))" {="" :="" dp[i]="true;" :="" break;="" :=""
: }="" :="" ...................="">

avatar
d*l
12
短路了吧

【在 G**Y 的大作中提到】
: 第一个为啥会爆炸呀?没看懂
avatar
s*d
13
bool wordBreak(string s, unordered_set &dict) {
vector f(s.size() + 1, false);
f[0] = true;
for (int i = 1; i <= s.size(); ++i) {
for (int j = i - 1; j >= 0; --j) {
if (f[j] && dict.find(s.substr(j, i - j)) != dict.end()) {
f[i] = true;
break;
}
}
}
return f[s.size()];
}
avatar
w*t
14
各种蛋疼, 尤其是倒数第四个, 太坏了.

【在 p*********g 的大作中提到】

avatar
s*x
15
这道题总感觉应该把字典先建成trie.
网上搜索到的解法都是要试试几乎所有可能的子串,效率太差了。
至少应该先求出字典里最长单词的长度 I think.
avatar
A*k
16
谁说那个年代不会蒙太奇,爱森斯坦在拍战舰波将金号的时候就用蒙太奇了

【在 c******n 的大作中提到】
: 默片时代的产物
: 应该没死 不过那个年代不会蒙太奇 不会摆角度
: 搞的那些动作 成龙看了怕都要尿

avatar
w*g
17
把字典先建成trie有啥用?
avatar
H*g
18
扔石头的那个,后面的人也可能被砸断手
avatar
p*e
19
我想错了,这个是dp. 而且复杂度是O(n^2 * s), s是字典长度。要想进一步优化,肯
定需要trie了。复杂度可以是O(n*s) 吧。

【在 A*********t 的大作中提到】
: 暴力的是dfs。这个算是DP了,每个位置搜到都记录下来。
:
: substr(
: "

avatar
l*t
20
为啥不能砸扁脑袋?

【在 H********g 的大作中提到】
: 扔石头的那个,后面的人也可能被砸断手
avatar
s*x
21

有了trie,复杂度应该是O(nW), where W is average of word length in the
dictionary.
假如我们忽略trie 的构建成本。

【在 p***e 的大作中提到】
: 我想错了,这个是dp. 而且复杂度是O(n^2 * s), s是字典长度。要想进一步优化,肯
: 定需要trie了。复杂度可以是O(n*s) 吧。

avatar
w*g
22
为什么有了trie,复杂度应该是O(nW)?
能不能贴个pseudo code?
avatar
s*x
23

有了trie,checking a substring is a prefix of any words become very easy,
just traverse the path in the trie.
for example, if no word begins with abc, you do not need to check if abcd,
abcde is in the dictionary or not.
when trie is not used, you have to lookup the dictionary for all substrings
starting a given position.
可以看看boggle puzzle 那题,那题不用trie 好像没法弄。

【在 w******g 的大作中提到】
: 为什么有了trie,复杂度应该是O(nW)?
: 能不能贴个pseudo code?

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