2014阿里巴巴网上笔试题-文章3大标题-公共最长的字符串长度

说明

2014阿里巴巴网上笔试题-文章3大标题    首先。我没有参加阿里巴巴网上笔试题,所有的主题是叙述性说明来自别人。的分析。假设有什么不正确的地方还望不吝赐教。

也希望大家可以有更好的办法,希望大家来能不吝赐教。

题目描写叙述

给定一个主字符串和一个匹配字符串。如今问你,找出 “主串中可匹配到的匹配串中子串的最大长度”,可能比較绕。举个样例吧

主字符串       abcdefgsdff     记为A

匹配字符串   abefgf               记为B

要求的值就是  3   由于 A中有efg B中也有efg ,并且也是AB中公共最长字符串

就是求两个字符串中连续公共最长字符串的长度。

分析

思路1.

因为匹配穿B的长度有限,所以能够求出B的全部连续子串 (时间复杂度O(M^2)),然后用每个子串向主串匹配(每次操作最快O(N))。这样的思路的时间复杂度就是O(M^2*N),代码自行设计,此处不赘述。

思路2.

使用DP的方式,思路我就不说了。

时间复杂度: O(M*N)

空间复杂度:O(M)

以下使用这样的思路实现的c++代码:

#include <iostream>
#include <string.h>
using namespace std;
#define SUBLEN 50
#define MAINLEN 1000

char str1[SUBLEN];  //匹配串
char str2[MAINLEN]; //主串

int tmp1[SUBLEN];   //辅助1
int tmp2[SUBLEN];   //辅助2

//数组复位
void init(int * arr,int len){
    for(int i = 0 ; i < len ;i++)arr[i]=0;
}

/**
    计算主串中可匹配到的匹配串中子串的最大长度
    时间复杂度:O(m*n)
    空间复杂度:O(m)
*/
int getMaxSubLen(){
    int maxLen = 0;
    for(int i = 0 ; i < strlen(str2);i++){
        if(i&1){
            for(int j = 0 ; j < strlen(str1) ; j++ ){
                if(str2[i]==str1[j]){
                    tmp1[j+1] = tmp2[j] + 1;
                    if(maxLen < tmp1[j+1])maxLen = tmp1[j+1];
                }else tmp1[j+1] = 0;
            }
        }else{
            for(int j = 0 ; j < strlen(str1) ; j++ ){
                if(str2[i]==str1[j]){
                    tmp2[j+1] = tmp1[j] + 1;
                    if(maxLen < tmp2[j+1])maxLen = tmp2[j+1];
                }else tmp2[j+1] = 0;
            }
        }
    }
    return maxLen;
}
/*
asawdecsescdsfdrfrc    ascsesfdr
sdjnfksdsdlkmfl       sjskm
sdsdsdsdsdsdwwwww      sdswwwsdsdwwwww

測试结果
4
2
9
*/
int main()
{
    while(cin>>str2>>str1){
        init(tmp1,50);
        init(tmp2,50);
        cout<<getMaxSubLen()<<endl;
    }
    return 0;
}

是不是还有更好的算法?O(N)?

好吧,这个问题好像就是 “最长公共子串”  看来自己退化的不行不行的了

这里有时间复杂度:O(m+n)的解法

http://blog.csdn.net/yysdsyl/article/details/4226630

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-07 09:29:49

2014阿里巴巴网上笔试题-文章3大标题-公共最长的字符串长度的相关文章

2014年阿里巴巴在线笔试题-第3大题-公共最长字符串长度

说明 2014年阿里巴巴在线笔试题-第3大题    首先,我没参加这次的阿里巴巴在线笔试题,题目全部是从别人口中描述而来,对于以下的分析,如果有什么不对的地方还望指教.也希望大家能够有更好的办法,希望大家来能不吝赐教. 题目描述 给定一个主字符串和一个匹配字符串,现在问你,找出 "主串中可匹配到的匹配串中子串的最大长度",可能比较绕,举个例子吧 主字符串       abcdefgsdff     记为A 匹配字符串   abefgf               记为B 要求的值就是 

诺基亚(Microsoft Devices Group)2014暑期实习生笔试题知识点

总结一下Microsoft Devices Group的软件类笔试题,所有笔试题分两份试卷,逻辑题一份和软件测试题一份,只总结技术题喽~题目全英文,只包含选择题和填空题,选择题居多,分单选和多选,多选题题目会标注出来.总体来说考察的很基础也很细节,难度适中.下面把记得的一些知识点总结一下下: *命名管道的定义. *主机A发送IP数据报给主机B,途中经过了5个路由器.试问在IP数据报的发送过程总共使用几次ARP(6次) *Linux系统下,给一个文件重命名(mv A,B) *考察无符号整型数和有符

新浪笔试题之删除文本中词频最小的所有字符串

时间:2014.06.04 地点:基地二楼 -------------------------------------------------------------------------------- 一.题目 题目大概是这样纸的,一个文本文件,里面有好多字符串,要求删除在整个文本中出现频率最少的字符串,如果这个最小值对应的字符串有很多,则都删除,结果是输出一个文本,保留下来的字符串用 '\t' 符号分割. ------------------------------------------

2015年阿里巴巴校招笔试题

校招找工作的同学,可以看看,非常有帮助! 推荐: http://gointernetgo.com/textinterview/bishi-2015-alibba [产品经理]阿里巴巴2015校园招聘笔试题 [研发工程师]阿里巴巴2015校园招聘笔试题 [研发工程师]阿里巴巴2015校园招聘笔试题2 [国际安全运营专员]阿里巴巴2015校园招聘笔试题1 [产品运营]阿里巴巴2015校园招聘笔试题1 [前端开发工程师]阿里巴巴2015校园招聘笔试题1 [前端开发工程师]阿里巴巴2015校园招聘笔试题

003_C/C++笔试题_分享大汇总

(一)感谢:lhzstudio 01_C++经典面试题全集 50~100道 都附带有参考答案 02_C++开发工程师面试题库 100~150道 03_C++笔试题库之编程.问答题 150~200道 04_C++笔试题库之编程.问答题 200~300道 原文地址:https://www.cnblogs.com/luxiaoguogege/p/9786873.html

阿里巴巴实习生笔试题(含答案)

1.动态链接库的优点? 答:共享.开发速度快,减少页面交换.拓展一下,静态链接库的优点:(1) 代码装载速度快,执行速度略比动态链接库快: (2) 只需保证在开发者的计算机中有正确的.LIB文件,在以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地域等问题. 2..n个数值选出最大m个数(3<m<n)的最小算法复杂度是 答:O(n) 3.由权值分别为1.12.13.4.8的叶子节点生成一颗哈夫曼树,它的带权路径长度为() 答:81. 4.阿里巴巴国际站

2016阿里巴巴java笔试题

题目: 一个整形数组里除了一个数字出现3次以外,其他数字都出现2次.请写程序找出这个出现3次的数字. 要求使用辅助空间O1,时间复杂度Onlogn. 1.使用堆排序.(堆排序的时间复杂度为Onlogn) 因为堆排序每次取到的都是最大(或是最小)的数字,三个相同的数字肯定是紧挨着被取出的. 所以在原先的堆排序算法上,加2个标记记录即可. 代码: // 使用堆排序,每次取最大的,连续取到3个相同的,那说明就是 public static int find2(int[] array) { // 堆排序

奇安信集团笔试题:二叉树的最近公共祖先(leetcode236),杀死进程(leetcode582)

1. 二叉树最近公共祖先 奇安信集团 2020校招 服务端开发-应用开发方向在线考试 编程题|20分2/2 寻祖问宗 时间限制:C/C++语言 1000MS:其他语言 3000MS 内存限制:C/C++语言 65536KB:其他语言 589824KB 题目描述: 姓氏是人的符号标志,是家族血脉的传承:族谱是家族血脉传承的文字记载.同姓的两个中国人,根据族谱或许能够查出上面几代内是同一个祖先.查一下族谱,也许当代某位同姓名人就是你的远房亲戚,惊喜不惊喜,意外不意外!!! 输入 二元查找树(1.若左

2014阿里巴巴WEB前端实习生在线笔试题

2014年3月31日晚,我怀着略微忐忑的心情(第一次在线笔试^_^!!)进行了笔试,阿里巴巴的笔试题共有10道,几乎包含了Web前端开发的各个方面,有程序题.有叙述题,时间非常紧张,只完成了大概6道题.下面把遇到的题目跟大家分享一下! 1. <pre name="code" class="html"><!doctype html> <html> <head> <style type="text/css&