第四章小结补充版
首先是串的模式匹配:这个题主要是要用KMP算法来解决,然后其实不是特别难理解,因为前几周已经开始习惯用实例的方法来分析代码,所以这次也用了一下这个方法来理解题目,但是这样感觉其实不是特别的好,因为会漏掉一些情况没有考虑到,而且有一些代码的实例也不是那么好想出来的,所以不能完全依赖这个找实例的方法,以后要慢慢培养更好的方法。还遇到的一个问题就是下标和位置的匹配问题,参考了同学的方法,一种是直接通过求数组的长度再加一,实现下表与位置相同,另一种则是通过构造一个新的函数来实现。对比了两种方法,我个人更偏向于求数组长度再加一的方法,因为这种代码简洁明了,而且操作性更强,不需要大篇幅地修改和增加代码。
第二个是稀疏矩阵:这个题目虽然要求里是要查找一个数据是否在这个稀疏矩阵里,但真正比较难实现的是稀疏矩阵的构造,而不是查找和比较。如果上课没有认真听讲的话,估计看到这个题目会无从下手。因为在我提前看书时,就没有想到要用一个怎样的数据结构去实现稀疏矩阵的存储。在上课时,老师将需要储存的数据用结构体打包,结构体内包含这个数据的位置(行和列)和数值,而矩阵内的其余位置不需要特殊操作,只要稍微绘图就可以轻松理解稀疏矩阵的存储方式,可以发现稀疏矩阵并不是特别难实现的,更多的是需要我们多思考用什么方法去存储,学到的结构体要学以致用,不要每次都等到老师启发才发现有这种方法。
第三个是AI核心代码:在刚看到这个题目,正如老师所说,我的内心是非常崩溃的,一个题目包含了7个要求,而且并非每个要求都是那么好实现的,虽然是老师带着我们打的题目,我还是想总结几个我觉得自己会考虑不周全的地方。
(1)消除空格:我在考虑这一点的时候,想的是要怎么把空格消除掉,再放到新的字符串里,但这样就会遇到一个问题,就是在删除了一个空格后,如果后面还有若干个要删除的空格,要怎么操作;但是听了老师的操作之后,我发现我的想法是非常不可行的,这样不仅需要开辟新的空间来存放新的字符串,而且如果是删除空格,则后面的数据都要进行移动,再进行下一次操作;那么老师的方法,则是如果这里的空格是需要“删除”的,则在输出时直接跳过这个空格不输出即可,并非一定要将字符串都改变了,只要输出时满足条件即可,这一点就发现自己考虑得不够周全,没有仔细看清楚题目的要求,花了很多时间去做无用功。
(2)将所有独立的 I 和 me 换成 you :这里遇到的问题就是两个,一个是怎么判断 I 和 me 是否为独立,一个是数组长度的问题。首先判断是否独立并不是很难,难的是要考虑是否会越栈的问题,而这里使用字符串的一个好处就是,在结尾时的空格,也需要一个位置来存储,这样就可以做到在判断 I 和 me 位于最右边界时是否独立这个情况时,不会越栈;而第二个问题则比较难发现,就是将 I 和 me 换成 you时,数组的长度最多是要变大3倍的,比如若原数组全为 I ,那么修改后则全为 you ,此时新的数组长度如果仍定义为1002,就会出现bug了,所以在定义新数组存储时,必须将长度定义为3002。
这次作业最大的收获,就是学习了一点老师和优秀同学的思维方式,发现了自己更多的不足之处,希望可以再接再厉!