查看: 4383| 回复: 8
收起左侧

Facebook: Implement strstr using KMP

Imbalism | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   42
100%
0%
0

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
rt, 有人用双重循环做, 考官不满意,所以还是练练KMP写法吧, 不难

上一篇:Facebook: remove element in an array
下一篇:Facebook: count number of words in a string
wwwyhx 2011-10-11 00:48:52 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   177
88%
12%
25
facebook 要问这种题就是存心不想要人过面试
回复

使用道具 举报

darksteel 2011-10-12 02:03:29 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   32
100%
0%
0
用KMP??也只有facebook想的出来。。没点竞赛背景不行啊。过两天复习下KMP来写写
回复

使用道具 举报

wwwyhx 2011-10-12 02:24:16 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   177
88%
12%
25
直接叫15分钟写个B+树得了
回复

使用道具 举报

 楼主| Imbalism 2011-10-12 02:40:34 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   42
100%
0%
0
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int KMP (string str, string p, vector<int> next)
{
     int j = -1;
     for (int i = 0; i < str.size(); ++i)
     {
          while(j >= 0 && str[i] != p[j + 1])
               j = next[j];
          if (str[i] == p[j + 1])
               ++j;
          if (j == p.size() - 1)
               return i - p.size();
     }
     return -1;
}

vector<int> getNext(string p)
{
     vector<int> v(p.size());
     int j = -1;
     v[0] = -1;
     for(int i = 1; i < p.size(); ++i)
     {
          while(j >= 0 && p[j + 1] != p[i])
               j = v[j];
          if (p[i] == p[j + 1])
               ++j;
          v[i] = j;
     }
     return v;
}

char* strstr(char* haystack, char* needle)
{
     string str(haystack);
     string pattern(needle);

     vector<int> next = getNext(pattern);
     int r = KMP(str, pattern, next);
     if (r == -1)
          return 0;
     return haystack + r;
}

int main()
{
     char* h = "asdfasdf";
     char* n = "fasd";
     cout << strstr(h, n) << endl;
}
回复

使用道具 举报

 楼主| Imbalism 2011-10-12 02:41:07 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   42
100%
0%
0
真难啊。。。。。。
回复

使用道具 举报

imwmwm 2011-11-1 23:57:26 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   15
100%
0%
0
回复 4# wwwyhx
再写个AVL, 红黑什么的吧
回复

使用道具 举报

nooneknow 2011-11-5 10:12:35 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   202
93%
7%
15
KMP还好吧。知道怎么回事就能写出来。
回复

使用道具 举报

wwwyhx 2011-11-5 10:36:20 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   177
88%
12%
25
KMP还好吧。知道怎么回事就能写出来。
nooneknow 发表于 2011-11-5 10:12



    忘了咋整
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表