为了让大家明白算法的重要性,以上我就举了几个经典的算法面试题,我的目的也很简单,就是希望引起大家对算法的一个兴趣。
之所以在正式讲解数据结构与算法之前引出这几个经典的算法面试题,是因为我想告诉大家如下三点。
- 算法非常重要。
- 算法非常有趣。
- 算法学习起来有一定的难度。
而且,从目前的情况来看,不会算法的程序员迟早会被逐渐淘汰,所以大家一定要对算法重视起来,对它要有一个足够的认识。而正是鉴于此,我才在前两讲中给大家列举了那几个经典的算法面试题。
接下来,我们不妨对前两讲中介绍的几个经典算法面试题做一个总结,复习复习一下。
字符串匹配问题
大家应该还记得我给大家介绍的第一个经典算法面试题吧!是不是就是字符串匹配问题啊!还有印象吧!
字符串匹配问题是这样描述的,说有这样一个字符串,即str1 = "阿阿昀 李阿昀你李阿 李阿昀你李阿昀你李阿你好"
,和另外一个子串,即str2="李阿昀你李阿你"
,现在要判断str1
是否含有str2
,如果判断存在,那么就返回str2
子串在str1
字符串中第一次出现的位置,如果没有,那么则返回-1,并且要求用最快的速度来完成匹配。
大家有兴趣不妨先想一想,如果这道算法题给到你,那么你会怎么做呢?
我想,如果你没有学过算法,例如KMP算法,那么一般来说你是会采用暴力匹配这种方式来进行解决的。但是,暴力匹配它有一个特点,就是简单但效率低下。
因此,要想解决该问题,那我们就得使用KMP算法了!至于KMP算法是如何来解决的字符串匹配问题,那就要留待以后再来为大家进行讲解了,因为这里一两句话也说不清楚。
汉诺塔游戏
然后,我给大家介绍的第二个经典算法面试题便是汉诺塔游戏,还有印象吧!
关于汉诺塔游戏,我想下图应该可以大致描述出来。
总体来说,它的要求还是很简单的,如下:
- 将A塔的所有圆盘移动到C塔。可以看到,上图中A塔一共有5个圆盘,其实,圆盘的个数不止这么少,最多的时候有64个这么多。
- 并且规定小圆盘上不能放大圆盘。也就是说,在移动的整个过程中,大圆盘是不可以放在小圆盘上的。
- 此外,还规定在三根柱子之间一次只能移动一个圆盘。