由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问一个老的google面试题
相关主题
请问驿道面试题贴几道某大公司的面试题
问一个字符串面试问题**公司面试问题,求助,多谢!!
几道微软面试题关于String Interleaving 验证的问题
发Google面经,为明天MS攒rplongestCommonPrefix 究竟怎样时间复杂度最低?
MS面试题求问一道面试题 cisco
新鲜出炉的Yelp面经[已更新]问一道关于字符串的面试题
Find shortest substring that is only occurring once. in Given String(Medallia面试题)请教G家的一个面试题
leetcode 438的难度 是不是标错了?请教一道题目
相关话题的讨论汇总
话题: substring话题: str话题: 字符话题: characters话题: 面试题
进入JobHunting版参与讨论
1 (共1页)
w**t
发帖数: 23
1
A long string text, given some characters, find the shortest
substring covering all given characters.
请问大家有没有想法,谢谢
f*******4
发帖数: 1401
2
quick thoughts:
两个指针p,q,先前进q直到cover了所有characters,记录当前长度
然后单步前进q,每次都尽量前进p使得pq间仍旧cover了所有characters,
maintain最短长度
需要用一个map维护出现的字符
复杂度O(n)因为相当于scan了2次
w**t
发帖数: 23
3
谢谢,思路挺好

【在 f*******4 的大作中提到】
: quick thoughts:
: 两个指针p,q,先前进q直到cover了所有characters,记录当前长度
: 然后单步前进q,每次都尽量前进p使得pq间仍旧cover了所有characters,
: maintain最短长度
: 需要用一个map维护出现的字符
: 复杂度O(n)因为相当于scan了2次

L***Q
发帖数: 508
4
假设str[0..n-1]表示整个字符串。基本思路是从str[0]开始,以每个位置作为substring的起点,从该位置往后直到substring能cover所有字符。那么最多就有n个起点。问题是,如何每次只用O(1)来确定substring长度。
我想可以用一个辅助数组记录每种字符出现在字符串中的位置。例如字符a出现在str[0]和str[20]两个地方。假设当前已经确定以str[0]为起点的substring长度。接下来应该确定以str[1]为起点的substring长度。该substring丢弃了str[0],所以必须要至少在str[20]结束,否则字符a没被cover。这就是基本思路。
我用一个例子解释整个算法。假设字符串包括0到9的数字,整个串如下
0247324596818329654001378
第一步扫描字符串,记录下每种字符位置,如下
0:0,19,20
1:11,21
2:1,5,14
3:4,13,22
4:2,6,18
5:7,17
6:9,16
7:3,23
8:10,12,24
9:8,15
第二步,以str[0]为起点,substring的终点在str[11].
接下来,以str[1]为起点,因为丢弃了str[0],即字符0,那么从辅助数组可以找到下一个字符0出现在str[19],因此substring结束于str[19]。
这样每次substring起点往后一个字符,用O(1)时间可以确定结束位置。

【在 w**t 的大作中提到】
: A long string text, given some characters, find the shortest
: substring covering all given characters.
: 请问大家有没有想法,谢谢

z**c
发帖数: 625
5
请问如何判断“pq间仍旧cover了所有characters”?是用你说的map吗?如果是的话,
key和value是什么呢?

【在 f*******4 的大作中提到】
: quick thoughts:
: 两个指针p,q,先前进q直到cover了所有characters,记录当前长度
: 然后单步前进q,每次都尽量前进p使得pq间仍旧cover了所有characters,
: maintain最短长度
: 需要用一个map维护出现的字符
: 复杂度O(n)因为相当于scan了2次

g*********e
发帖数: 14401
6

maybe by counting the number of appearance for every char in the current p
to q?
when appearance is 0, you can't move p one step further.

【在 z**c 的大作中提到】
: 请问如何判断“pq间仍旧cover了所有characters”?是用你说的map吗?如果是的话,
: key和value是什么呢?

z**c
发帖数: 625
7
forever84说的是用map来存这个pq之间的信息,我只是不明白这个检查是O(1)的吗?
难道不需要检查每个字符都在这个map吗?那么如果那个小字符串长度是K,整个复杂度不
就是O(N*K)了?
还是我哪里理解错了?

【在 g*********e 的大作中提到】
:
: maybe by counting the number of appearance for every char in the current p
: to q?
: when appearance is 0, you can't move p one step further.

j******a
发帖数: 55
8

substring的起
点,从该位置往后直到substring能cover所有字符。那么最多就有n个起点。问题是,
如何每次只用
O(1)来确定substring长度。
[0]和str[20]
两个地方。假设当前已经确定以str[0]为起点的substring长度。接下来应该确定以str
[1]为起点的
substring长度。该substring丢弃了str[0],所以必须要至少在str[20]结束,否则字
符a没被
cover。这就是基本思路。
这个空间复杂度有点高,不如ls的想法,只需要动态更新一个histogram,时间复杂度都
是2n

【在 L***Q 的大作中提到】
: 假设str[0..n-1]表示整个字符串。基本思路是从str[0]开始,以每个位置作为substring的起点,从该位置往后直到substring能cover所有字符。那么最多就有n个起点。问题是,如何每次只用O(1)来确定substring长度。
: 我想可以用一个辅助数组记录每种字符出现在字符串中的位置。例如字符a出现在str[0]和str[20]两个地方。假设当前已经确定以str[0]为起点的substring长度。接下来应该确定以str[1]为起点的substring长度。该substring丢弃了str[0],所以必须要至少在str[20]结束,否则字符a没被cover。这就是基本思路。
: 我用一个例子解释整个算法。假设字符串包括0到9的数字,整个串如下
: 0247324596818329654001378
: 第一步扫描字符串,记录下每种字符位置,如下
: 0:0,19,20
: 1:11,21
: 2:1,5,14
: 3:4,13,22
: 4:2,6,18

i**********e
发帖数: 1145
9
两种解法:
http://www.ihas1337code.com/2010/11/finding-minimum-window-in-s
一些常见面试题的答案与总结 -
http://www.ihas1337code.com
1 (共1页)
进入JobHunting版参与讨论
相关主题
请教一道题目MS面试题
有人知道怎么证明最短公共超序列问题是NP Hard 的么?谢谢!新鲜出炉的Yelp面经[已更新]
问两道google题Find shortest substring that is only occurring once. in Given String(Medallia面试题)
Ask a google interview question(3)leetcode 438的难度 是不是标错了?
请问驿道面试题贴几道某大公司的面试题
问一个字符串面试问题**公司面试问题,求助,多谢!!
几道微软面试题关于String Interleaving 验证的问题
发Google面经,为明天MS攒rplongestCommonPrefix 究竟怎样时间复杂度最低?
相关话题的讨论汇总
话题: substring话题: str话题: 字符话题: characters话题: 面试题