首页 > 代码库 > <数据结构与算法>之字符串,散列,布隆过滤器。

<数据结构与算法>之字符串,散列,布隆过滤器。

1:字符串

  字符串是一组由数字,字符,下划线的一串字符,是特殊的一维数组。

2:字符串的应用

   字符串移位包含问题:

  例:给定两个字符串s1和s2,要求判断s2是否能被s1做循环移位得到字符串包含。例如,给定s1=ABCD 和s2=CDAA,返回true。给定s1=ABCD,和s2=ACBD,返回false。    

  KMP算法:

  例:给定两个字符串O和S,其长度分别为n和m,求是否s在o 中是否出现如果出现则返回出现的位置。

  分析:常规的算法是去遍历O的每一个元素,然后从该位置开始和s进行比较,但是这种算法的复杂度为O(nm);

    KMP算法则是处理s的前后端的长度处理完后再进行比较的出返回位置。

  编辑距离:

  例:假设A和B是两个字符串。要用最少的字符操作将字符串A转化为字符串B。这里所说的字符操作包括:

    1:删除一个字符;

    2:加入一个字符;

    3:替换一个字符;

  将字符串A转化为字符串B所需要的最少的字符在操作数称为编辑距离。记作d(A,B);设置一个有效的算法,计算出任一两个字符串A和B,计算出他们的编辑距离d(A,B);

    性质:

    两个字符串的最小编辑距离至少是两个字符串的长度差;

    两个字符串的最大编辑距离最多是两个字符串中长度最长的那个长度;

    两个字符串的编辑距离为0的首要条件是两个字符串完全相等。

    如果两个字符串等长,编辑距离的上限是汉明距离;

    编辑距离满足三角不等式;

    应用:

    字符串拼写检查;

    DNA相似度的检查;

    diff命令,等。

与其他度量标准的关系:

    汉明距离:只允许替换操作,两个字符等长;

    最长公共子序列:只允许插入和删除操作;

分析:

  使用动态规划来解,固定一个字符串,将另一个字符串通过三种操作来变化为这个字符串(B--A);

3:正则表达式

  :文本中字符串的查找和替换;

  :“*”表示前面内容重复任意次;

  :"A*.*"可以表示a,ab,aa,b,空字符。等等;

4:通配符

  :用在命令行中查找文件

  :"*"代表多个字符;

  :“?”代表任意单字符;

  :“a*?*”可以表示ab,abcd。等等;

5:最长回文子串

<数据结构与算法>之字符串,散列,布隆过滤器。