发信人: wookoong (悟空), 信区: JobHunting
标 题: airBnb电面面经
发信站: BBS 未名空间站 (Sat May 10 01:21:41 2014, 美东)
一上来就做题,没有废话。只做一题,但是要求直接编译运行出正确结果。
题目是给定一个word list 和一个target word,要求输出在word list 里跟target
word的edit distance 相差不大于k的所有words。我写了一个基于edit distance的解
法(见下面),程序是要从头到尾都要写,包括main函数和test数据。写完后他问有没有
更好的解法,我说可以用trie,但是我不觉得我能在剩余时间里写得出来基于trie的解
法,就大致说了一下我认为的思路。在此也求大牛给一个基于trie解法的code。
======================
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//k=1
// word_list = ['dat', 'bat', 'batt', 'beetle']
// similar(query, word_list)
// similar('cat', word_list) = ['dat', 'bat']
// similar('bat', word_list) = ['bat', 'batt', 'dat']
// similar('datt', word_list) = ['dat', 'batt']
//
// To execute C++, please define "int main()"
vector<string> similar(string word, vector<string> &word_list, int k);
int editDist(string word1, string word2);
int main() {
string word = "datt";
vector<string> word_list = vector<string>({"dat", "bat", "batt", "beetle"}
);
int k=1;
vector<string> ret = similar(word, word_list, k);
for(int i=0; i< (int) ret.size(); i++)
cout<<ret[i]<<endl;
}
int editDist(string word1, string word2){
int len1=word1.length();
int len2=word2.length();
int m[len1+1][len2+1];
//m[0][0]=0;
//init the matrix
for(int i=0; i<len1; i++){
m[i][0]=i;
}
for(int j=0; j<len2; j++)
m[0][j]=j;
//then update the matrix
for(int i=1; i<=len1; i++){
for(int j=1; j<=len2; j++){
m[i][j]=min(m[i-1][j-1]+(int)(word1[i-1]!=word2[j-1]), m[i-1][j]+1);
m[i][j]=min(m[i][j], m[i][j-1]+1);
}
}
return m[len1][len2];
}
vector<string> similar(string word, vector<string> &word_list, int k){
vector<string> ret;
int n= word_list.size();
if(n<1) return ret;
for(int i=0; i<n; i++){
if(editDist(word, word_list[i])<=k){
cout<<endl<<"dist: "<< editDist(word, word_list[i]);
ret.push_back(word_list[i]);
}
}
return ret;
}
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 192.]
Monday, June 9, 2014
airBnb电面面经
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment