bd测试开发笔试题

1.如果有个字符串mary存在其字母转换位置后的另一个单词存在,例如army,就说其存在兄弟单词,设计数据结构与算法,在单词词典中找到某单词的所有兄弟单词。

2.C/C++动态分配内存的方式,区别是什么?

3.进程与线程的区别与联系,什么是“线程安全”。

4.网络爬虫算法,链表的建立规则,比较两个链表是否相同,处理有无循环的情况。(网页有几百亿,不能用hash)

网络爬虫,假定每个网页至多有一个页面,爬虫抓取的结果是一个单向链表x1.html -> x2.html -> ... -> NULL。现在给定两个页面A和B,经过抓取后得到两个链表,如何判定爬虫抓取到了相同的URL。(网页有几百亿,不能用hash)。设计算法,写出实现的关键代码,不用写爬虫的代码。

5.两个有序的子串a1[0~mid-1]和a1[mid~num-1]怎样合成有序的数组,设计一个merge算法,使用O(1)的空间使得数组a[0,n-1]变为有序数组,数组元素支持'<'运算

6.系统设计题,suggestion算法,考虑百度搜索栏,输入“北京”,会出现提示下拉列表

请问如何实现这个功能,说明用到的数据结构和算法。用什么方法优化能够使得时间和空间效率尽可能好。

1.第一个题,我用的树的深度搜索,但是感觉应该用广度优先搜索,同学有用素数求解的,即每个单词对应一个素数,在字典中求乘积一样的单词。

2.区别是什么?

3.线程安全是什么?

4.如何处理循环的情况?

5.使用的时间复杂度比较高,需要测试写写

6.没写完,在第四个题上花费时间较长。

 

 

解答:

如何找出字典中的兄弟单词


给定一个单词a,如果通过交换单词中字母的顺序可以得到另外的单词b,那么定义b是a的兄弟单词。现在给定一个字典,用户输入一个单词,如何根据字典找出这个单词有多少个兄弟单词?

答案: 
使用hash_map和链表。 
首先定义一个key,使得兄弟单词有相同的key,不是兄弟的单词有不同的key。例如,将单词按字母从小到大重新排序后作为其key,比如bad的key为abd,good的key为dgoo。 
使用链表将所有兄弟单词串在一起,hash_map的key为单词的key,value为链表的起始地址。 
开始时,先遍历字典,将每个单词都按照key加入到对应的链表当中。当需要找兄弟单词时,只需求取这个单词的key,然后到hash_map中找到对应的链表即可。 
这样创建hash_map时时间复杂度为O(n),查找兄弟单词时时间复杂度是O(1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值