由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问G家一道电面题
相关主题
攒rp整理面试题(1)string match/text search请问 KMP算法重要吗?
字串 查找的 最佳算法。发个F onsite后的加试面经吧 求bless
问几道较难的字符串题只刷了110道现在。
AMZ面经String Match一定要用KMP吗?
弯曲中型IT公司面经贴一下我google第一轮店面的题目
问两个G面试题Rabin-Karp算法对不定长的query set怎么办?
关于leetcode 的strStr这题电面不好,求bless。这题怎么答?
面试中遇到suffix tree / trie这种题,需要自己实现吗?贡献一个中型软件公司面经
相关话题的讨论汇总
话题: int话题: pattern话题: arr话题: string话题: while
进入JobHunting版参与讨论
1 (共1页)
r******n
发帖数: 170
1
找到字符串A在字符串B中出现的次数,可以重复使用字母,比如 A: aba B:ababa, 那
么返回2.
只收了O(n*m)的暴力算法,请问最优的,谢谢!
q***y
发帖数: 24
2
kmp改一点
把A做一个自动机,B在A自动机上过一遍
O(n)

【在 r******n 的大作中提到】
: 找到字符串A在字符串B中出现的次数,可以重复使用字母,比如 A: aba B:ababa, 那
: 么返回2.
: 只收了O(n*m)的暴力算法,请问最优的,谢谢!

w****x
发帖数: 2483
3
暴力就够了吧
i******e
发帖数: 273
4
用DFA的是rabin karp吧?
把KMP改成匹配成功以后如果text string (B) 还没结束,
i) 如果text string中的字符可以重复使用, 则pattern (A) 退回到当前prefix
function对应的位置继续匹配
ii)如果text string中的字符不能重复使用, 则从pattern (A) 当前位置继续匹配
直到text string 结束,用一个counter记录匹配的次数

【在 q***y 的大作中提到】
: kmp改一点
: 把A做一个自动机,B在A自动机上过一遍
: O(n)

q***y
发帖数: 24
5
rabin karp是什么?

【在 i******e 的大作中提到】
: 用DFA的是rabin karp吧?
: 把KMP改成匹配成功以后如果text string (B) 还没结束,
: i) 如果text string中的字符可以重复使用, 则pattern (A) 退回到当前prefix
: function对应的位置继续匹配
: ii)如果text string中的字符不能重复使用, 则从pattern (A) 当前位置继续匹配
: 直到text string 结束,用一个counter记录匹配的次数

x*******6
发帖数: 262
6
对B建一个suffixtree,然后从里面找出路径为字符串A的internal node,数数这个
node
的subtree有几个leaf。线性复杂度
Z*****Z
发帖数: 723
7
写个练手
public static void main(String[] args) {
System.out.println(countOccurrence("gcagagagcagagag", "gcagagag"));
}
public static int countOccurrence(String haystack, String needle){

char[] str = haystack.toCharArray();
char[] pattern = (needle + '\0').toCharArray();
int n = needle.length();

int[] table = buildFailureTable(pattern);

int count = 0;
int i = 0, j = 0;
while(i < str.length){
while(j > 0 && pattern[j] != str[i]){
j = table[j];
}

i ++;
j ++;

if(j == n){
count ++;
j = table[j];
}
}

return count;
}
private static int[] buildFailureTable(char[] pattern) {
int[] arr = new int[pattern.length];

int i = 0;
int j = -1;
arr[0] = -1;

while(i < arr.length - 1){

while(j >= 0 && pattern[i] != pattern[j]){
j = arr[j];
}

i++;
j++;

if(pattern[i] == pattern[j]){
arr[i] = arr[j];
} else {
arr[i] = j;
}
}
return arr;
}

【在 i******e 的大作中提到】
: 用DFA的是rabin karp吧?
: 把KMP改成匹配成功以后如果text string (B) 还没结束,
: i) 如果text string中的字符可以重复使用, 则pattern (A) 退回到当前prefix
: function对应的位置继续匹配
: ii)如果text string中的字符不能重复使用, 则从pattern (A) 当前位置继续匹配
: 直到text string 结束,用一个counter记录匹配的次数

i******e
发帖数: 273
8
见CLRS 3rd Edition pp.990-995

【在 q***y 的大作中提到】
: rabin karp是什么?
h******8
发帖数: 278
9
正准备换工作,请教大牛们,我也研究生CS,没学过这末复杂的算法,你们都是自学的
?我看了下CLRS,天书一样,一下泄气了大半。

【在 i******e 的大作中提到】
: 见CLRS 3rd Edition pp.990-995
f******h
发帖数: 45
10
但是 建suffix tree 还是需要至少 O(nlgn)的复杂度吧。

【在 x*******6 的大作中提到】
: 对B建一个suffixtree,然后从里面找出路径为字符串A的internal node,数数这个
: node
: 的subtree有几个leaf。线性复杂度

g**e
发帖数: 6127
11
O(n)
http://pdf.aminer.org/000/979/588/space_efficient_linear_time_c

【在 f******h 的大作中提到】
: 但是 建suffix tree 还是需要至少 O(nlgn)的复杂度吧。
1 (共1页)
进入JobHunting版参与讨论
相关主题
贡献一个中型软件公司面经弯曲中型IT公司面经
问个简单的问题...问两个G面试题
问一道string match的题目 出自glassdoor facebook版关于leetcode 的strStr这题
facebook一题面试中遇到suffix tree / trie这种题,需要自己实现吗?
攒rp整理面试题(1)string match/text search请问 KMP算法重要吗?
字串 查找的 最佳算法。发个F onsite后的加试面经吧 求bless
问几道较难的字符串题只刷了110道现在。
AMZ面经String Match一定要用KMP吗?
相关话题的讨论汇总
话题: int话题: pattern话题: arr话题: string话题: while