势在必得 level
获赞
18
粉丝
1
关注
2
看过 TA
2
哈尔滨工业大学深圳研究生院
Java
IP属地:未知
暂未填写个人简介
私信
关注
/** * 二分查找,查找target,在区间[start,end]之间 * 有重复元素,返回最后一个下标 * 其他情况返回-1 */ int bisearch(vector<int> arr, int len, int target, int start, int end) { } /** * 输出字符串中的所有重复子串: * 例如:abcab * 输出: a, b, ab * */ void getAllSub(string str) { }     百度凤巢电话面试一上来就写代码,╮(╯▽╰)╭第二道题不会写。已跪!
codermanFa...:先使用Hash,由于字符有256个,可以创建256个大小的数组,放入数组中,记录每个值出现的坐标,此时从第一个hash开始,先判断该hash值是否大于1,如果不大于1则跳过,因为不会重复,如果大于1则肯定至少有一个自己,输出(或者放入set中)然后根据该值的坐标找到下一个值,如果下一个值在hash中的大小也大于1并且这个值的坐标比该值的坐标大于1,则修改该值为下一个值,并找出下一个的下一个值是否也满足(大于1并且这个值的坐标比该值的坐标大于1)此时找到的最长的链中可能存在重复子串(如果此时最长链中只有这一条或者下面第二个链中与这一条没有重复或者连续则查找失败),然后再从第一个值的第二次出现的坐标依次往下找到第二个链,求最长公共子串,然后从第二个相同的开始截取,即可找出所有这些链的重复子串,依次对其中hash值出现次数大于1的串进行上述操作。。。。
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务