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:最长回文子串

<数据结构与算法>之字符串,散列,布隆过滤器。的更多相关文章

  1. Hash算法:双重散列

    双重散列是线性开型寻址散列(开放寻址法)中的冲突解决技术.双重散列使用在发生冲突时将第二个散列函数应用于键的想法. 此算法使用: (hash1(key) + i * hash2(key)) % TAB ...

  2. Java数据结构和算法总结-字符串及高频面试题算法

    前言:周末闲来无事,在七月在线上看了看字符串相关算法的讲解视频,收货颇丰,跟着视频讲解简单做了一下笔记,方便以后翻阅复习同时也很乐意分享给大家.什么字符串在算法中有多重要之类的大路边上的客套话就不多说 ...

  3. Java数据结构和算法总结-字符串相关高频面试题算法

    前言:周末闲来无事,看了看字符串相关算法的讲解视频,收货颇丰,跟着视频讲解简单做了一下笔记,方便以后翻阅复习同时也很乐意分享给大家.什么字符串在算法中有多重要之类的大路边上的客套话就不多说了,直接上笔 ...

  4. 数据结构和算法 – 4.字符串、 String 类和 StringBuilder 类

    4.1.String类的应用 class String类应用 { static void Main(string[] args) { string astring = "Now is The ...

  5. js数据结构与算法——字典与散列表

    <script> //创建字典 function Dictionary(){ var items = {}; this.set = function(key,value){ //向字典添加 ...

  6. 纯数据结构Java实现(11/11)(散列)

    欢迎访问我的自建博客: CH-YK Blog.

  7. 数据结构与算法--Boyer-Moore和Rabin-Karp子字符串查找

    数据结构与算法--Boyer-Moore和Rabin-Karp子字符串查找 Boyer-Moore字符串查找算法 注意,<算法4>上将这个版本的实现称为Broyer-Moore算法,我看了 ...

  8. Java数据结构与算法解析(十二)——散列表

    散列表概述 散列表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值. 散列表的思路很简单,如果所有的键都是整数,那么就可以使用一个简单 ...

  9. DotNet加密方式解析--散列加密

    没时间扯淡类,赶紧上车吧. 在现代社会中,信息安全对于每一个人都是至关重要的,例如我们的银行账户安全.支付宝和微信账户安全.以及邮箱等等,说到信息安全,那就必须得提到加密技术,至于加密的一些相关概念, ...

随机推荐

  1. QML引擎的演进,第一部分

    原文链接:Lars Knoll – Evolution of the QML engine, part 1 QML作为一项技术对于Qt的成功变得越来越重要.它允许创建流畅的动画界面,与现今的市场预期相 ...

  2. NOR Flash擦写和原理分析

    NOR Flash擦写和原理分析 1. NOR FLASH 的简单介绍 NOR FLASH 是很常见的一种存储芯片,数据掉电不会丢失.NOR FLASH支持Execute On Chip,即程序可以直 ...

  3. Java学习基础2

    运算符: ++:  int a = 4;  int b = a++;    ++在后:先运算在递增1   输出:a=5  b=4;    int b = ++a;    ++在前:先递增1,再运算 输 ...

  4. 仿东软OA协同办公服务管理系统

    兼容IE6,7,8以上.GooleChrome.360及遨游等浏览器.系统特色:1.系统经过抗压测试.2.语音提示功能.3.支持office2007在线编辑.4.强大的图形化工作流程设计及文档编辑留痕 ...

  5. libcurl教程

    名称 libcurl 的编程教程 目标 本文档介绍使用libcurl编程的一般原则和一些基本方法.本文主要是介绍 c 语言的调用接口,同时也可能很好的适用于其他类 c 语言的接口. 跨平台的可移植代码 ...

  6. Mob.com 短信验证的简单使用

    1.环境配置 http://wiki.sharesdk.cn/android-短信sdk集成文档/ a.sdk下载 http://www.mob.com/#/downloadDetail/SMS/an ...

  7. hdu 1026(Ignatius and the Princess I)BFS

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  8. Android之ProgressBar

    今天复习一下以前的知识,补充一下ProgressBar控件 progressBar是进度条组件,通常用于用户展示某个耗时操作完成的进度,而不让用户感觉是程序失去了响应,从而更好地提升用户界面的友好性. ...

  9. c#中如何获取listbox中选中值的问题

    StringBuilder ConponPerson = new StringBuilder();            for (int i = 0; i < lb_tzs.Items.Cou ...

  10. 安装好grunt,cmd 提示"grunt不是内部或外部命令" 怎么办?

    Grunt和所有grunt插件都是基于nodejs来运行的,因此,必须安装node.js. (一) 去官网http://nodejs.org/ 下载安装包 node-v6.9.2.msi,直接点击安装 ...