Redian新闻
>
Big bang theory这周更新了吗?
avatar
Big bang theory这周更新了吗?# Joke - 肚皮舞运动
d*o
1
the longest repeated substring problem is the problem of finding the longest
substring of a string that occurs at least twice.
比如
input: banana
ouput: ana
bruth force way是O(n^3),我只做出来这个,弱啊。
哪位大牛来解释一下?
avatar
s*a
2
最近都没有时间看电视,刚刚跑去cbs.com 上没有看到更新啊,上周是这一季最后一集
了?
还有什么地方可以看到?pps好像没有吧?
avatar
p*2
3
用trie做吗?
avatar
w*0
4
You are right
上周season finale
avatar
d*o
5
具体讲讲,怎么可以比O(n^3)快

【在 p*****2 的大作中提到】
: 用trie做吗?
avatar
M*X
6
pps在海外剧场慢慢找,或者search.应该是有的
avatar
p*2
7

把所有的substring写到trie里的话就是n^2复杂度吧?

【在 d****o 的大作中提到】
: 具体讲讲,怎么可以比O(n^3)快
avatar
w*x
8

用rolling hash的思想就是O(n^2)

【在 p*****2 的大作中提到】
:
: 把所有的substring写到trie里的话就是n^2复杂度吧?

avatar
p*2
9

rolling hash啥思想呀?给个summary吧。

【在 w****x 的大作中提到】
:
: 用rolling hash的思想就是O(n^2)

avatar
d*o
10
对,把每一个substring都hash到一个hash_map里面去,就是O(n^2)
但是这个space是 O(n^2)

【在 p*****2 的大作中提到】
:
: rolling hash啥思想呀?给个summary吧。

avatar
p*2
11

hash的时间复杂度是O(1)吗?

【在 d****o 的大作中提到】
: 对,把每一个substring都hash到一个hash_map里面去,就是O(n^2)
: 但是这个space是 O(n^2)

avatar
w*x
12

还是n^3吧

【在 p*****2 的大作中提到】
:
: hash的时间复杂度是O(1)吗?

avatar
p*2
14

input: banana
ouput: ana
应该是n^2
把banana
anana
nana
ana
na
a
写到trie里不是n^2吗?写的时候就可以判断是不是最长了。

【在 w****x 的大作中提到】
:
: 还是n^3吧

avatar
w*x
16

是啊,rolling嘛

【在 p*****2 的大作中提到】
:
: 他这个算法跟我说的差不多呀。

avatar
p*2
17

没研究过。感觉hash跟字符串的长度有关吧。

【在 w****x 的大作中提到】
:
: 是啊,rolling嘛

avatar
l*a
18
trie就是o(n)
why 用那些不常见的

【在 p*****2 的大作中提到】
:
: 没研究过。感觉hash跟字符串的长度有关吧。

avatar
i*e
19
这个题用suffix array 比较好做啊。 programming pearl chapter 15章的内容。 O(
nlongn).
avatar
l*a
20
数组sort就是nlgn
你字符串sort算是n^2*lgn吧

【在 i***e 的大作中提到】
: 这个题用suffix array 比较好做啊。 programming pearl chapter 15章的内容。 O(
: nlongn).

avatar
i*e
21
如果用radix sort strings? 那么这个可以是O(n)?

【在 l*****a 的大作中提到】
: 数组sort就是nlgn
: 你字符串sort算是n^2*lgn吧

avatar
d*o
22
你说啥了?

【在 p*****2 的大作中提到】
:
: 没研究过。感觉hash跟字符串的长度有关吧。

avatar
p*2
23

刚才出去游泳想了一下。是可以做到的

【在 w****x 的大作中提到】
:
: 是啊,rolling嘛

avatar
r*g
24
标准算法吧
construct suffix tree
find deepest internal node
trace from root
O(n)

【在 p*****2 的大作中提到】
:
: 刚才出去游泳想了一下。是可以做到的

avatar
p*2
25

刚才看了一下。construct suffix tree好写吗?从来没写过呀。

【在 r**********g 的大作中提到】
: 标准算法吧
: construct suffix tree
: find deepest internal node
: trace from root
: O(n)

avatar
r*g
26
O(n)的不是很好写。Google一下,很长

【在 p*****2 的大作中提到】
:
: 刚才看了一下。construct suffix tree好写吗?从来没写过呀。

avatar
p*2
27

那面试碰到不是要跪吗?LZ说一下这题是要思路还是写代码呢?我觉得我用trie写个n^
2的还有可能。

【在 r**********g 的大作中提到】
: O(n)的不是很好写。Google一下,很长
avatar
r*g
28
我觉得值得一学。suffix tree搞好了以后无数东西都解决了

n^

【在 p*****2 的大作中提到】
:
: 那面试碰到不是要跪吗?LZ说一下这题是要思路还是写代码呢?我觉得我用trie写个n^
: 2的还有可能。

avatar
g*e
29
如果不用写build suffix tree代码的话还是可以写一下的

n^

【在 p*****2 的大作中提到】
:
: 那面试碰到不是要跪吗?LZ说一下这题是要思路还是写代码呢?我觉得我用trie写个n^
: 2的还有可能。

avatar
p*2
30

嗯。有时间好好学学。

【在 r**********g 的大作中提到】
: 我觉得值得一学。suffix tree搞好了以后无数东西都解决了
:
: n^

avatar
l*a
31
放心吧,没有任何人在面试中被要求写这个
除非就是不想要你

【在 p*****2 的大作中提到】
:
: 嗯。有时间好好学学。

avatar
p*2
32

是。不想要的话,怎么也没辙。

【在 l*****a 的大作中提到】
: 放心吧,没有任何人在面试中被要求写这个
: 除非就是不想要你

avatar
d*o
33
我还是好好看一下suffix tree吧。怎么没有懂呢。

n^

【在 p*****2 的大作中提到】
:
: 是。不想要的话,怎么也没辙。

avatar
s*e
34
用suffix array,可以有O(nlogn)。在programming pearls第二版的15.2有详细讨论。
avatar
p*2
35
好奇的问问大家。
我刚才翻了一下CLRS,上边没有介绍suffix tree。你们是什么时候学的呢?做
research还是准备面试呢?我看suffix tree的面试题其实也很少。
avatar
l*a
36
有一次研究重复子串/最长子串的题目,在网上查到一篇文章
才知道这些题目都可以用suffix tree解决

【在 p*****2 的大作中提到】
: 好奇的问问大家。
: 我刚才翻了一下CLRS,上边没有介绍suffix tree。你们是什么时候学的呢?做
: research还是准备面试呢?我看suffix tree的面试题其实也很少。

avatar
p*2
37

我记得你给我发过,不过当时扫了一眼,没怎么看,因为觉得面试不会碰到。

【在 l*****a 的大作中提到】
: 有一次研究重复子串/最长子串的题目,在网上查到一篇文章
: 才知道这些题目都可以用suffix tree解决

avatar
l*a
38
万一哪次你碰上因此没拿到offer,估计你就下工夫看看了

【在 p*****2 的大作中提到】
:
: 我记得你给我发过,不过当时扫了一眼,没怎么看,因为觉得面试不会碰到。

avatar
p*2
39

是。看了一下,你那个链接还在。今天扫一遍。

【在 l*****a 的大作中提到】
: 万一哪次你碰上因此没拿到offer,估计你就下工夫看看了
avatar
d*o
40
求分享

【在 p*****2 的大作中提到】
:
: 是。看了一下,你那个链接还在。今天扫一遍。

avatar
c*e
41
求链接。谢!

【在 d****o 的大作中提到】
: 求分享
avatar
f*n
43
one way to solve it is to use DP. runtime is O(n^2) and it requires O(n)
extra space.
import java.util.ArrayList;
import java.util.List;
public class StringOperation {
public static void main(String[] args) {
StringOperation strOp = new StringOperation();
System.out.println(strOp.findLongRepeatedString("banana"));
System.out.println(strOp.findLongRepeatedString("aaaaa"));
}

public String findLongRepeatedString(String src) {
Result longestResult = null;

List repeatedStrs = new ArrayList();
for(int i = 1; i < src.length(); i++) {
List newRepeatedStrs = new ArrayListResult>();

for (Result result : repeatedStrs) {
if(src.charAt(result.endIndex+1) == src.charAt(i)) {
Result r = new Result();
r.startIndex = result.startIndex;
r.endIndex = result.endIndex+1;
newRepeatedStrs.add(r);

if(longestResult == null) {
longestResult = r;
} else if(r.length() > longestResult.length()) {
longestResult = r;
}
}
}

for(int j = 0; j < i; j++) {
if(src.charAt(j) == src.charAt(i)) {
Result r = new Result();
r.startIndex = j;
r.endIndex = j;
newRepeatedStrs.add(r);
if(longestResult == null) {
longestResult = r;
}
}
}

repeatedStrs = newRepeatedStrs;
}

if(longestResult == null) {
return null;
} else {
return src.substring(longestResult.startIndex, longestResult.
endIndex + 1);
}
}

private class Result {
private int startIndex;
private int endIndex;

public int length() {
return endIndex - startIndex;
}
}

}
avatar
b*o
44
你说的对,programming pearls的作者在这里犯了个错误。他假设两个字符串比较只需
要O(1)。而实际上最坏情况是O(1)。
但是貌似suffix tree的算法在最坏情况也是O(n^2)。因为build tree的时候,每次两
个子字符串比较最坏也可能需要O(n)。
一个这样子的例子就是全a串"aaaaa.....aaa"。两个suffix string比较时间平均是n/2。
这使suffix array和suffix tree的最坏时间复杂度分别是O(n^2 log(n))和O(n^2)。

【在 l*****a 的大作中提到】
: 数组sort就是nlgn
: 你字符串sort算是n^2*lgn吧

avatar
b*y
45
niu!

【在 i***e 的大作中提到】
: 这个题用suffix array 比较好做啊。 programming pearl chapter 15章的内容。 O(
: nlongn).

avatar
c*g
46
刚好我也看到programming pearls这章。
string sorting 需要O(n^2*logn)?不是吧。而是和平均字符串d相关。
string array的结构满简单,容易理解的。还没看suffix tree。貌似没书讲,只能
google了。

/2。

【在 b*****o 的大作中提到】
: 你说的对,programming pearls的作者在这里犯了个错误。他假设两个字符串比较只需
: 要O(1)。而实际上最坏情况是O(1)。
: 但是貌似suffix tree的算法在最坏情况也是O(n^2)。因为build tree的时候,每次两
: 个子字符串比较最坏也可能需要O(n)。
: 一个这样子的例子就是全a串"aaaaa.....aaa"。两个suffix string比较时间平均是n/2。
: 这使suffix array和suffix tree的最坏时间复杂度分别是O(n^2 log(n))和O(n^2)。

avatar
c*x
47
suffix array和suffix tree构造都很麻烦,面试碰到肯定是不用写了。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。