阿里-2019算法岗笔试编程题-kmp匹配

				版权声明:本文为博主原创文章,未经博主允许不得转载。					https://blog.csdn.net/qq_25737169/article/details/82503724				</div><link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-f57960eb32.css"><div id="content_views" class="markdown_views"><!-- flowchart 箭头图标 勿删 --><svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg><p>编程题一共两道,博主是个菜鸡,有幸被阿里虐了一遍,笔试结束后整理了一下题目和自己的答案,希望对各位有个参考,放正文前,先放一张图,今年阿里和商汤的笔试时间有冲突,网上对于阿里和商汤的笔试评价如下图: <br>

阿里的编程题真的好接地气,感觉就是把项目中的一个小小的部分拿来了吧,完全打个措手不及;

这里写图片描述

开始正文

阿里:编程题1

这里写图片描述

请使用标准输出(sys.stdout);已禁用图形、文件、网络、系统相关的操作,如Process , httplib , os;缩进可以使用tab、4个空格或2个空格,但是只能任选其中一种,不能多种混用;如果使用sys.stdin.readline,因为默认会带换行符,所以要strip(’ ‘)进行截取;建议使用raw_input()
时间限制: 3S (C/C++以外的语言为: 5 S) 内存限制: 128M (C/C++以外的语言为: 640 M)
输入:
输入数据包含两行,
第一行,实体列表,多种实体之间用分号隔开,实体名和实体值之间用下划线隔开,多个实体值之间用竖线隔开,所有标点都是英文状态下的,格式如下:
实体名称1_实体值1|实体值2|…;实体名称2_实体值1|实体值2|…;…
第二行,用户的自然语言指令
输出:
被标记了关键词的指令。指令中的关键词前后加一个空格被单独分出来,并在后面跟上”/”+实体名称来标记。如果一个实体值属于多个实体,将这些实体都标记出来,并按照实体名称的字符串顺序正序排列,并以逗号分隔。
输入范例:
singer_周杰|周杰伦|刘德华|王力宏;song_冰雨|北京欢迎你|七里香;actor_周杰伦|孙俪
请播放周杰伦的七里香给我听
输出范例:
请播放 周杰伦/actor,singer 的 七里香/song 给我听


个人答案,说到底就是字符串的处理问题,我先将关键字部分暴力搜索提取出来放在一个哈希表里,然后根据输入的情况,不断从哈希表里查找,输出结果,这里放上自己的答案,没有全部AC,有问题请各位指出:


def Solve(inputs, dicts):res = ""i = len(inputs) - 1while i>=0:j = i - 1s = inputs[j:i+1]while j>=0 and s not in dicts:j -= 1s = inputs[j:i+1]if s in dicts:res = ' ' + s + '/' + dicts[s] + ' '+ resi  = j-1else:res = inputs[i] + resi -= 1return resimport sys
if __name__ == '__main__':ss = input().split(';')dicts = {}names = []for s in ss:s = s.split('_')s[1] = s[1].split('|')for i in range(len(s[1])):key = s[1][i]if key not in dicts:dicts[key] = s[0]else:dicts[key] = dicts[key] + ',' + s[0]names += s[1]strings = input()res = Solve(strings, dicts)

测试结果:
我的Linux没有中文的,所以我就直接提取了每个字的第一个字母代替这个字做测试;
输入:

singer_zj|zjl;song_by|qlx;actor_zjl|sl
qbfzjldqlxgwt
  • 1
  • 2

输出情况:
这里写图片描述
从单个测试结果来看,还是正确的,但是不确定中文情况下行不行,我的结果也没有全部AC

阿里编程第二题

这里写图片描述
请使用标准输出(sys.stdout);已禁用图形、文件、网络、系统相关的操作,如Process , httplib , os;缩进可以使用tab、4个空格或2个空格,但是只能任选其中一种,不能多种混用;如果使用sys.stdin.readline,因为默认会带换行符,所以要strip(’ ‘)进行截取;建议使用raw_input()
时间限制: 3S (C/C++以外的语言为: 5 S) 内存限制: 128M (C/C++以外的语言为: 640 M)
输入:
输入数据包含两行,
第一行,上述格式的语义模板表达式
第二行,用户的自然语言指令(即:用户query)
输出:
当前query是否匹配当前语义模板表达式。匹配,则输出1,否则输出0.
输入范例:
<[播]放|来>[一|几]<首|曲|个>@{singer}的<歌[曲]|[流行]音乐>
来几首@{singer}的流行歌曲
输出范例:
0


这个题没做出来,好麻烦,事后做了一下,纯暴力切割字符串,一个个做匹配,代码一点也不符合信达雅原则,请轻喷:

def inprocess(strings):dicts = {'<':'>', '>':'<', '[':']', ']':'[' }flag = []i = 0res = []start = 0# split inputs to many stringswhile i <len(strings):s = strings[i]if s=='<' or s=='[':flag.append(s)if strings[start]=='@':res.append(strings[start:i])start = ielif flag and s==dicts[flag[-1]]:tmp = flag.pop()if flag:continueelse:res.append(strings[start+1:i])start = i+1del tmpi += 1# process the rescollect = []for id, lists in enumerate(res):if '|' not in lists:collect.append(lists)continuelists = lists.split('|')for s in lists:i = 0# while i < len(s):if s[i]=='[':collect.append(s[i+1:s.index(']')])i = s.index(']')+1if i<len(s):collect.append(collect[-1]+s[i:])elif '[' not in s:collect.append(s)for c in res:print(c)print(collect)return collectdef testing(qurry, collect):i = 0while i<len(qurry):c = qurry[i]if c in collect:collect = collect[collect.index(c)+1:]elif c=='@':if qurry[i:qurry.index('}')+2] in collect:i = qurry.index('}') + 1else:return 0else:return 0i += 1return 1if __name__ == '__main__':inputs = "<[B]F|L>[Y|J]<S|Q|G>@{singer}G<[Q]|[LX]YL>"res = inprocess(inputs)qurry = "LJS@{singer}GLXGQ"

我想的是:来几首@{singer}的流行歌曲测试结果为0可能是流行和歌曲放反了???只能是歌曲,流行,流行音乐???喵喵喵???

测试结果:
这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/481196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IBM量子处理器,将突破1000位

来源&#xff1a;半导体行业观察IBM的CONDOR是世界上第一台拥有超过1000个量子比特的通用量子计算机&#xff0c;它将于2023年首次亮相。预计这一年IBM还将推出Heron&#xff0c;这是该公司表示可能对其有所帮助的新型模块化量子处理器群中的第一个到2025年生产出超过4000个量子…

ChatGPT到底有多聪明?我测试了ChatGPT的数学能力

来源&#xff1a;AI前线译者&#xff1a;马可薇 人人都听说过最新&#xff0c;也是最复杂的聊天机器人 chatGPT。而众所周知&#xff0c;它在英文文学等“软话题”方面甚是熟练&#xff0c;所以我决定测试它在数学这类“硬话题”方面的表现。你可能不知道&#xff0c;但我是有…

从朴素贝叶斯到贝叶斯网

回顾在文章《朴素贝叶斯》中&#xff0c;小夕为大家介绍了朴素贝叶斯模型的基本知识&#xff0c;并且得出了朴素贝叶斯是利用联合概率P(x1,x2,x3...xn,y)来确定某个样本为某个类别的概率&#xff0c;进而利用最大后验概率&#xff08;MAP&#xff09;来决策类别。也就是说&…

2022年,谁在数学史上永远留下了姓名

来源&#xff1a;新智元这一年&#xff0c;数学领域有什么大事&#xff1f;Quanta Magazine做了一份全年总结。我们可以把数学家想象成考古学家——他们煞费苦心地拂去世界隐藏结构上的灰尘。起来很吸引人&#xff1f;“你的起点并不重要&#xff0c;但要眼光长远&#xff0c;了…

神经网络激活函数=生物转换器?

啊~昨晚躺了一个小时竟然没有睡着&#xff0c;美容觉泡汤了...于是竟然大半夜起来写了这篇文章在《逻辑回归到神经网络》中&#xff0c;小夕让神经网络冒了个泡。在《一般化机器学习与神经网络》中&#xff0c;将神经网络这一火热的模型强制按回机器学习一般框架里。在《BP算法…

从Encoder到Decoder实现Seq2Seq模型

首发于机器不学习关注专栏写文章从Encoder到Decoder实现Seq2Seq模型天雨粟模型师傅 / 果粉​关注他300 人赞同了该文章更新&#xff1a;感谢Gang He指出的代码错误。get_batches函数中第15行与第19行&#xff0c;代码已经重新修改&#xff0c;GitHub已更新。前言好久没有更新专…

市场增速超20%,国产操作系统“浴火重生” | 解读操作系统的 2022

作者 | 凌敏 本文是“2022 InfoQ 年度技术盘点与展望”系列文章之一&#xff0c;由 InfoQ 编辑部制作呈现&#xff0c;重点聚焦操作系统领域在 2022 年的重要进展、动态&#xff0c;希望能帮助你准确把握 2022 年操作系统领域的核心发展脉络&#xff0c;在行业内始终保持足够的…

线性代数应该这样讲(二)

在《...&#xff08;一&#xff09;》中&#xff0c;小夕从映射的角度讲解了矩阵及矩阵运算&#xff0c;这也是机器学习中看待矩阵的非常重要的视角。另一方面说&#xff0c;矩阵当然也是用于存储数据的数据结构&#xff0c;这也是最好理解的形式。另外还可以看做是一个线性方程…

2023将至,Bengio等大佬年度展望!懂理性的AI模型要来了?

来源&#xff1a;新智元【导读】2022年对AI来说注定是不平凡的一年&#xff0c;这不吴恩达、Bengio等一众圈内大佬在接受DeepLearning.ai的采访中都展望了2023年AI的发展趋势&#xff0c;还分享了自己的科研小故事。还有1天&#xff0c;2022年就要过去了。此前我们报道了吴恩达…

【NLP】Attention Model(注意力模型)学习总结

【NLP】Attention Model&#xff08;注意力模型&#xff09;学习总结郭耀华发表于郭耀华‘s Blog订阅294在这篇文章中&#xff1a;1. 什么是Attention机制&#xff1f;2. 先了解编码-解码框架&#xff1a;Encoder-Decoder框架3. Attention Model4. Attention机制的本质思想5. S…

杂谈机器学习的几个应用场景

在上一篇文章末尾&#xff0c;小夕提到了“机器学习是实现自然语言处理的正确道路”。其实确实如此&#xff0c;纵观整个自然语言处理的发展史&#xff0c;也是纵观整个人工智能的发展史&#xff0c;从诞生到现在&#xff0c;机器学习不仅是在理论和工程上实现自然语言处理的目…

2022年度十大AI技术盘点:AIGC风暴来袭,自动驾驶后会无期?

来源&#xff1a;AI科技大本营翻译 & 整理&#xff1a;杨阳“科学不能告诉我们应该做什么&#xff0c;只能告诉我们能做什么。”——让-保罗萨特《存在与虚无》这一年&#xff0c;AI又有哪些前沿技术突破呢&#xff1f;通过汇总梳理2022年10大AI技术&#xff0c;AI科技大本…

从逻辑回归到受限玻尔兹曼机

在那很久很久以前&#xff0c;可爱的小夕写了一篇将逻辑回归小题大做的文章&#xff0c;然后在另一篇文章中阐述了逻辑回归的本质&#xff0c;并且推广出了softmax函数。从那之后&#xff0c;小夕又在一篇文章中阐述了逻辑回归与朴素贝叶斯的恩仇录&#xff0c;这两大祖先级人物…

Peacock:大规模主题模型及其在腾讯业务中的应用-2015

Peacock&#xff1a;大规模主题模型及其在腾讯业务中的应用 作者&#xff1a;赵学敏 王莉峰 王流斌 孙振龙 严浩 靳志辉 王益 摘要 如果用户最近搜索了“红酒木瓜汤”&#xff0c;那么应该展示什么样的广告呢&#xff1f;从字面上理解&#xff0c;可能应该返回酒水或者水果类广…

史上最简单的玻尔兹曼机模型讲解

在上一篇文章中&#xff0c;小夕讲述了逻辑回归为了抗衡贝叶斯网&#xff0c;也开始了自己的进化。然而令我们没有想到的是&#xff0c;逻辑回归最终竟然进化成了一个生成式模型——受限玻尔兹曼机&#xff08;RBM&#xff09;&#xff0c;也就是变成了敌方&#xff08;生成式模…

从头到尾彻底理解KMP(2014年8月22日版)

从头到尾彻底理解KMP 作者&#xff1a;July 时间&#xff1a;最初写于2011年12月&#xff0c;2014年7月21日晚10点 全部删除重写成此文&#xff0c;随后的半个多月不断反复改进。后收录于新书《编程之法&#xff1a;面试和算法心得》第4.4节中。 1. 引言 本KMP原文最初写于2年多…

解开玻尔兹曼机的封印会发生什么?

在上一篇文章中&#xff0c;小夕讲述了逻辑回归为了抗衡贝叶斯网&#xff0c;也开始了自己的进化。然而令我们没有想到的是&#xff0c;逻辑回归最终竟然进化成了一个生成式模型——受限玻尔兹曼机&#xff08;RBM&#xff09;&#xff0c;也就是变成了敌方&#xff08;生成式模…

KMP算法的核心,是一个被称为部分匹配表(Partial Match Table)的数组以及next数组求解

KMP算法的核心&#xff0c;是一个被称为部分匹配表(Partial Match Table)的数组。我觉得理解KMP的最大障碍就是很多人在看了很多关于KMP的文章之后&#xff0c;仍然搞不懂PMT中的值代表了什么意思。这里我们抛开所有的枝枝蔓蔓&#xff0c;先来解释一下这个数据到底是什么。 对…

Softmax(假神经网络)与词向量的训练

今天终于要完成好久之前的一个约定了~在很久很久以前的《如果风停了&#xff0c;你会怎样》中&#xff0c;小夕提到了“深刻理解了sigmoid的同学一定可以轻松的理解用(假)深度学习训练词向量的原理”&#xff0c;今天就来测测各位同学对于sigmoid的理解程度啦~习惯性的交待一下…

二叉树的先序遍历、中序遍历、后序遍历、层次遍历-图文详解

概述 二叉树的遍历是一个很常见的问题。二叉树的遍历方式主要有&#xff1a;先序遍历、中序遍历、后序遍历、层次遍历。先序、中序、后序其实指的是父节点被访问的次序。若在遍历过程中&#xff0c;父节点先于它的子节点被访问&#xff0c;就是先序遍历&#xff1b;父节点被访问…