题目

面试题目是这样子的:

两个单词如果包含相同的字母,次序不同,则称为字母易位词(anagram)。例如,“silent”和“listen”是字母易位词,而“apple”和“aplee”不是易位词。请定义函数检查两个单词是否是字母易位词。可以假设两个单词字母均为小写。要求算法复杂度尽量低。

看到这个题目,你的思路是什么?

思路一

首先,最基本的思路,便是检测字符串s1中的字符是否都出现在s2中(在s1和s2长度一样的前提下)。为了解决“apple”和“aplee”不是易位词的这种情况,不能仅仅判断出现在s2中就可以了,还需要做个标记。这里可以考虑将字符串转换为list,对于比较过的便设置为None。算法代码设计如下:

image

让我们考虑一下算法复杂度。可以从字符串s2来考虑,对于s2中的每个元素,s1都会从头开始进行遍历一次,所以算法的复杂度为:

image

即算法的复杂度为O(n^2)。

有没有算法复杂度更低的思路呢?思考一下。

思路二

通过题目,我们可以想到,字母易位词即为各个字母的数目相同,而顺序不一致。因而,如果对字符串按照字母顺序排序后,那么两个字符串应该完全一致。这样算法复杂度是否更低?

先看一下代码实现如下:

image

这样算法复杂度是否是O(n)了呢?因为仅仅进行了n次比较啊。当然不是,为什么呢?因为事先先对两个字符串进行了排序,而排序的复杂度并未计入。所以,此种算法的复杂度即为O(nlogn+n),为O(nlogn)。复杂度比思路一的复杂度降低了。

有没有复杂度更低的算法呢?

思路三

思路二利用了字母易位词即为各个字母的数目相同,而顺序不一致。我们从另外一个角度思考,字母一共有多少个?很明显,只有26个(只考虑小写字母)。那么,我们可以为字符串s1和s2分别设置26个计数器,然后判断这对应位置的计数是否相等,如果对应计数完全相等,则为字母易位词。算法代码实现如下:

image

算法的复杂度为O(n + n + 26) ,即为O(n),为线性复杂度的算法。

前几天,一直在跟同事讨论怎么面试考察思维反应能力,

最后,想学习Python的小伙伴们!

请关注+私信回复:“学习”就可以拿到一份我为大家准备的Python学习资料!

pytyhon学习资料

python学习资料

一道微软Python面试题(文末附python教程丶电子书资料分享)相关推荐

  1. 了解和掌握Python的函数(文末附python学习资料)

    Python之所以灵活,就是因为它函数式编程的特性.今天开始学习Python的一些高级特性. 控制流 Python等程序语言,都是从程序顶端从上到下一行行执行语句,可以把它想象成线性.生活中的很多情况 ...

  2. python入门应该学什么专业好_真的能半个月学会Python吗?(文末附python入门进阶教程)...

    这里为什么用 Python 举例呢? 因为在很多人看来,Python 比较"简单". 写这篇文章主要是因为我在知乎上看到了一条有趣的动态: 该条动态的作者认为一个高考600分以上的 ...

  3. 阿里程序员整理的Python 各种符号,建议收藏,文末附Python资料

    Table 1.1. Python命令行选项 作用 -c cmd 在命令行直接执行python代码.如python -c 'print "hello world"'. -d 脚本编 ...

  4. LZW字典编码(文末附python实现代码)

    字典编码 文章目录 字典编码 1. LZW编码原理和实现算法 2. LZW算法详解 编码算法 解码算法 3. 代码实现 应用最广泛的一种字典编码算法,LZW算法:可以边扫描,边编码,边发送,是一个实时 ...

  5. 【实用教程】让我来帮你一键下载公zhong号图文封面吧(文末附小白教程)

    因部分内容不宜在博文中编写,已发布在社区帖子中. 详见社区帖子:https://bbs.csdn.net/topics/613235563 感谢大家的关注.

  6. python程序员专用壁纸_程序员炫技必备:用Python生成马赛克画!(文末附源码)...

    原标题:程序员炫技必备:用Python生成马赛克画!(文末附源码) 源 | Python与数据分析文 | 强哥 大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本 ...

  7. Python网络爬虫与信息提取笔记(续篇)(文末附教学视频)只供教学讲解,请勿对有robots协议的网站(如淘宝网)造成骚扰

    接上篇博客:Python网络爬虫与信息提取笔记(文末附教学视频) 14:基于bs4库的HTML内容遍历方法 标签树的下行遍历: 用len(soup.body.contents)返回body标签的儿子节 ...

  8. 80行代码自己动手写一个表格拆分与合并小工具(文末附工具下载)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 瑶池阿母绮窗开,黄竹歌声动地哀. ...

  9. python面试题及答案-50道Python面试题集锦(附答案)

    原标题:50道Python面试题集锦(附答案) Python是目前编程领域最受欢迎的语言.在本文中,我将总结Python面试中最常见的50个问题.每道题都提供参考答案,希望能够帮助你在2019年求职面 ...

最新文章

  1. 北京搜狗已签算法30W,西安银行总包20W,要不要毁约去银行?
  2. java二级选择题要对一半吗_据说一半以上的java程序员会出错的题
  3. css3的3d起步——分享
  4. python ---------函数
  5. 以下关于程序设计语言的叙述中,不正确的是()【最全!最详细解释!!】
  6. 基于MLlib的机器学习--协同过滤与推荐
  7. 相同布局在不同手机上显示不同_不懂响应式,不同尺寸屏幕下的页面很难达到最佳效果...
  8. python2和python3的默认编码_python2和python3哪个版本新
  9. Qt_qDebug 原理详解
  10. [视频相关2]网址解析接口
  11. 极光推送短信api接口
  12. Maya2018生成pyd文件
  13. 一步步教你装超强插件~油猴插件管理器Tampermonkey
  14. Linux协议栈--NAPI机制
  15. 攻防世界(动态调试题)
  16. gittortoise使用ssh秘钥
  17. 计算机网络技术职业现状分析,师范专科学校计算机网络技术专业现状与应对措施.doc...
  18. 一文读懂测序技术在新冠病毒检测中的应用(文末附FAQ)
  19. 坏道的基本介绍及恢复方法
  20. 不需要ROOT卸载小米电视系统应用

热门文章

  1. 路由器snmp配置_S7503E V7 snmpv3典型组网配置案例(与IMC联动)
  2. 岭南师范C语言程序设计真题_2021南京师范大学现代教育技术考研经验分享
  3. c++ linux 线程等待与唤醒_Linux驱动程序基石-POLL机制(附.视频)
  4. 【linux】RedHat 7.x 升级 openssh 为 8.x 版本
  5. 【tool】firewall防火墙
  6. 架构师的英文缩写_架构师必备的20个英文缩写!看你知道几个?
  7. c#图片base64去转义字符_C# imgage图片转base64字符/base64字符串转图片另存成
  8. Mac zsh: command not found zsh 所有命令在终端失效
  9. 【转】asp.net中bind()和eval()的区别
  10. HPU 1002 A + B Problem II【大数】