【数据结构】4.串
来源:互联网 发布:jdbc连接数据库5个步骤 编辑:程序博客网 时间:2024/06/05 20:20
【串的定义】
一、定义
1. 由多个字符组成的有限序列叫做串
2. 序列中字符的个数称为串的长度
3. 长度为零的串叫做空串
4. 仅由空格符组成的串叫做空格串
5. 串中任意连续序列称为该串的子串,包含子串的序列为主串。
6. 字符在串中的序号称为该字符在串中的位置,子串在串中的位置由它的第一个字符位置表示
【串的表示和实现】
一、定长顺序存储
二、堆动态分配存储
三、串的块链存储
【串的模式匹配】
一、常用的匹配算法
int IndexOf(string S,string T,int startIndex){ int i=startIndex,j=0; while(i< S.Length && j < T.Length) { if(S[I] == T[j]) { ++i; ++j; }else { i = i - j + 1; j=0; } } if(j== T.Length) return i-j; return -1;}
二、KMP的模式匹配算法
1.上面的算法一旦在比较出现不匹配的时候,就回到模式串的起始位置重新进行比较。
实际上根据模式串的字符特点,有些情况是不需要从头开始比较,可以将模串滑动到一定位置开始比较。
2.KMP匹配算法
int IndexOf(string S,string T,int startIndex){ int[] next = GenNext(T); int i=startIndex,j=-0; while(i< S.Length && j < T.Length) { if(j == -1 || S[I] == T[j]) { ++i; ++j; }else { j = next [j]; } } if(j== T.Length) return i-j; return -1;}
3.KMP求:当比较到主串的i位置,模式串的j位置时不匹配,应该将模式串滑动的距离k。
int[] GenNext(string T){ //-1表示重头开始 int[] nextArr = new int[T.length] int i=0; int j=--1; nextArr[i]=j; while(true) { if(j == -1 || T[i] == T[j]) { ++i; ++j; nextArr[i] = j; if(i == T.length -1) break; }else { j = nextArr[j]; } } return nextArr ;}
阅读全文
0 0
- 【数据结构】4.串
- 数据结构,串
- 数据结构---串
- 数据结构--串
- 数据结构-串
- 数据结构 串
- 数据结构 串
- 【数据结构】串
- 数据结构--串
- 【数据结构】-串
- 数据结构----串
- 数据结构-串
- 数据结构:串
- [数据结构]串
- [数据结构]串
- 数据结构--串
- 数据结构---串
- 数据结构----串
- 图像分割—基于图的图像分割(Graph-BasedImageSegmentation)
- html label-标签
- 仿照DatePickerFragment实现的TimePickerFragment
- LeetCode 144: Binary Tree Preorder Traversal 解题与思考
- Qt的传统安装方法
- 【数据结构】4.串
- 动态规划系列---求数组中两个元素差的最大值
- ZigBee规范各层原语及其功能概述
- hadoop(ha)+hbase
- LeetCode 94: Binary Tree Inorder Traversal 解题与思考
- 2017-10-11 ACM感言
- zkw线段树模板及理解
- python学习笔记1:%r和%s的区别
- HDU 1598 find the most comfortable road