由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - F面经的一题
相关主题
求问FB题目我也发一道A家的电面题,不难,但是跪了。。。。
FB 面筋Facebook电面
continuous subarray of closest subAmazon电面面经(1面和2面)
还真从来没见过考KMP之类string matching算法的an interview question
MS的 on site面试,求bless收到offer了,我的面试经历和总结
问G家一道电面题判断linkedlist是否palindrome最优解法是什么?
storm8 online test 讨论狗狗家onsite面经
String Match一定要用KMP吗?发个pure storage的interviewstreet题目
相关话题的讨论汇总
话题: int话题: string话题: prefix话题: integer
进入JobHunting版参与讨论
1 (共1页)
a*********0
发帖数: 2727
1
1, 给一个string,比如UAXXBAUB,给一个pattern,比如AB,返回包含pattern的最短
substring,结果是AUB,考虑pattern是有序的。
就是Minimum Window Substring的有序版
a*********0
发帖数: 2727
2
int minWindowSubString(const string& s, const string& t)
{
unordered_map> umap;
size_t ns=s.size();
size_t nt=t.size();
for(size_t i=0;i umap.emplace_back(s[i], i);
}

int min=INT_MAX;
while(1) {
int pre=-1;
size_t start=0;
size_t i=0;
for(;i int newpre=-1;
list ls=umap.find(nt[i]);
while(!ls.empty()) {
if(pre>ls.front()){
ls.pop_front();
} else {
if(i==0) start=ls.front();
newpre=ls.front();
}
}
if(newpre==pre) break;
pre=newpre;
}

if(i!=nt) break;
if(min>pre-start+1) min=pre-start+1;
}

return min;
}
h****3
发帖数: 89
3
这道题挺难的,是电面题吗?
m*******n
发帖数: 47
4
你的time complexity 是多少? 3 个loop嵌套。。
比下面的暴力解好?O(n^2)
int solve(string str, string p) {
int ip = 0;
int min_l = INT_MAX;
for(int i=0;i if (str[i]!=p[0]) continue;
for(int j=i;j if (str[j]==p[ip]) {
ip++;
if (ip==p.length()) {
ip=0;
min_l = min(min_l, j-i+1);
break;
}
}
}
}
return min_l
}
a*********0
发帖数: 2727
5
我的是O(nk)

【在 m*******n 的大作中提到】
: 你的time complexity 是多少? 3 个loop嵌套。。
: 比下面的暴力解好?O(n^2)
: int solve(string str, string p) {
: int ip = 0;
: int min_l = INT_MAX;
: for(int i=0;i: if (str[i]!=p[0]) continue;
: for(int j=i;j: if (str[j]==p[ip]) {
: ip++;

G*********e
发帖数: 56
6
显然用KMP算法呀。DFA version的KMP就可以搞定。线性时间,空间复杂度是pattern的
长度* the number of distinct characters in pattern。

【在 a*********0 的大作中提到】
: 1, 给一个string,比如UAXXBAUB,给一个pattern,比如AB,返回包含pattern的最短
: substring,结果是AUB,考虑pattern是有序的。
: 就是Minimum Window Substring的有序版

l*****n
发帖数: 246
7
我觉得这题如果是电面题的话,暴力解法就可以了吧。。。
h****3
发帖数: 89
8
这道题可以用dp解,不过有点难理解。。。
b***e
发帖数: 1419
9
如果pattern里没有重复的话可以是O(n)。

【在 a*********0 的大作中提到】
: 我的是O(nk)
y******s
发帖数: 92
10
问个问题:如果pattern是ABC,那ABBC算match吗?

【在 a*********0 的大作中提到】
: 1, 给一个string,比如UAXXBAUB,给一个pattern,比如AB,返回包含pattern的最短
: substring,结果是AUB,考虑pattern是有序的。
: 就是Minimum Window Substring的有序版

相关主题
问G家一道电面题我也发一道A家的电面题,不难,但是跪了。。。。
storm8 online test 讨论Facebook电面
String Match一定要用KMP吗?Amazon电面面经(1面和2面)
进入JobHunting版参与讨论
c******n
发帖数: 4965
11
他这个不是find string match. 要找subsequence

【在 G*********e 的大作中提到】
: 显然用KMP算法呀。DFA version的KMP就可以搞定。线性时间,空间复杂度是pattern的
: 长度* the number of distinct characters in pattern。

c******n
发帖数: 4965
12
yes

【在 y******s 的大作中提到】
: 问个问题:如果pattern是ABC,那ABBC算match吗?
c******n
发帖数: 4965
13
mine, O(N)
package actualseen.mitbbs;
import java.util.*;
/**
* find the shortest subsequence within a string that matches a pattern
*
* for example AooAooUooB contains the sequence AUB, starting from index 3
*
* @author
*
*/
public class ShortestSubsequenceContainingPattern {
public String find(String s, String p) {
char ss[] = s.toCharArray();
char pp[] = p.toCharArray();
int prefixStart[] = new int[pp.length];
List char2Prefix[] = new List[256];
for (int i = 0; i < pp.length; i++) {
if (char2Prefix[pp[i]] == null) {
char2Prefix[pp[i]] = new ArrayList();
}
char2Prefix[pp[i]].add(i);
prefixStart[i] = -1;
}
int best = Integer.MAX_VALUE;
int bestStart = 0;
for (int i = 0; i < ss.length; i++) {
char c = ss[i];
List prefixes = char2Prefix[c];
if (prefixes != null) { // matches SOME position in the pattern
for (int j = prefixes.size() - 1; j >= 0; j--) {
int prefix = prefixes.get(j);
if (prefix > 0) { // the matching char is not the first
in pattern, so we need to check previous prefixes
if (prefixStart[prefix - 1] >= 0) { // previous
prefix already found
prefixStart[prefix] = prefixStart[prefix - 1];
prefixStart[prefix - 1] = -1; //no need for
shorter prefix
if (prefix == pp.length - 1) {
if (i - prefixStart[prefix] + 1 < best) {
best = Math.min(best, i
- prefixStart[prefix] + 1);
bestStart = prefixStart[prefix];
}
}
}
} else {
prefixStart[0] = i;
}
}
}
}
return new String(ss, bestStart, best);
}
public static void main(String args[]) {
ShortestSubsequenceContainingPattern p = new
ShortestSubsequenceContainingPattern();
assert p.find("AxxBAU2B", "AUB").equals("AU2B");
assert p.find("xxxAxAyUxBAffffU2B", "AUB").equals("AyUxB");
}
}

【在 a*********0 的大作中提到】
: 1, 给一个string,比如UAXXBAUB,给一个pattern,比如AB,返回包含pattern的最短
: substring,结果是AUB,考虑pattern是有序的。
: 就是Minimum Window Substring的有序版

j**7
发帖数: 143
14
public String window(String S, String P) {
HashMap> indexMap = new HashMap<
Character, LinkedList>();
for (int i = 0; i < S.length(); i++) {
char c = S.charAt(i);
LinkedList list = indexMap.get(c);
if (list == null) {
list = new LinkedList();
list.add(i);
indexMap.put(c, list);
} else {
list.add(i);
}
}
String minSubString = null;
int min = Integer.MAX_VALUE;
while (true) {
int prev = -1;
int first = -1;
for (int i = 0; i < P.length(); i++) {
char c = P.charAt(i);
LinkedList list = indexMap.get(c);
if (list == null) {
return null;
}
while (list.isEmpty() == false && list.getFirst() <= prev) {
list.removeFirst();
}
if (list.isEmpty()) {
return minSubString;
}
if (i == 0) {
first = list.removeFirst();
prev = first;
} else {
prev = list.getFirst();
}
}
if (prev - first + 1 < min) {
min = prev - first + 1;
minSubString = S.substring(first, prev + 1);
}
}
}
j**7
发帖数: 143
1 (共1页)
进入JobHunting版参与讨论
相关主题
发个pure storage的interviewstreet题目MS的 on site面试,求bless
再问大牛们leetcode上面Linkedlist的题,Reverse Nodes in k-G问G家一道电面题
不明白leetcode OJ wordladder 2 总是 Time Limit Exceededstorm8 online test 讨论
问一个google面经题【地里转得】String Match一定要用KMP吗?
求问FB题目我也发一道A家的电面题,不难,但是跪了。。。。
FB 面筋Facebook电面
continuous subarray of closest subAmazon电面面经(1面和2面)
还真从来没见过考KMP之类string matching算法的an interview question
相关话题的讨论汇总
话题: int话题: string话题: prefix话题: integer