字符串和多维数组
这次总结的知识归纳是关于字符串和多维数组的。
首先字符串。
字符串是n个字符组成的有序序列,其所包含的字符个数就是串的长度。字符串中任意连续的字符组成的子序列称为该串的子串。包含子串的串为主串。
字符串的存储结构:
1.顺序串。这很简单就是用数组存储字符串中的字符。
2.表示串的长度。用一个变量表示串的实际长度。
3.也可以用一个特殊的符号作为终止符。我们常用的便是\0。
接下来就是比较重要的模式匹配。
BF算法。
主串S和模式T。
主串设置一个位置i。模式T也设置一个j。
从i等于0,j等于0开始。i++,j++开始比较,如果全部匹配成功,则结束。若中途有字符不相同。i回溯到1。j回溯到0,重新开始匹配。若又匹配失败,i回溯到2,j回溯到0重新匹配。以此类推。直到匹配成功或者主串全部比较完。 这个BF算法要进行多趟匹配。
KMP算法
KMP算法的开端与BF算法一致。不同的是从匹配失败以后。KMP算法失败之后与BF算法不同,进行移动时,KMP算法要比较模式T中的最大相同前缀子串和左子串。其中i可以不回溯,模式向右滑动到新的比较起点。一个next数组。当j等于0时next[j]等于-1。最大相同前缀子串和左子串的长度等于next[j]。构造一个数组。每当匹配失败时i不用回溯,j回溯到改数组的值。以此类推。比较到结束。
具体的代码实现比较复杂。在这就不做介绍,简单的说明一下思路。。