SlideShare a Scribd company logo
1 of 33
第 3 章 串
 3.1 串抽象数据类型
 3.2 串的表示和实现
 3.3 串的模式匹配
目的和要求
• 目的:串作为特殊线性表的实现与应用。
• 内容:字符串的基本概念,串抽象数据类型,
顺序和链式两种存储结构存储串的特点;采用
顺序存储结构实现串的各种操作算法;两种串
的模式匹配算法及应用: Brute-Force 算法和
KMP 算法。
• 要求:掌握顺序串类的基本操作实现方法,掌
握串 的模式匹配算法及应用。
• 重点:串数据类型的各种操作实现,两种串的
模式 匹配算法及应用。
• 难点: KMP 模式匹配算法, next 数组在 KMP
算法中 的作用及产生过程。
• 实验:顺序串类的基本操作及串的模式匹配算
《数据结构( Java 版)(第 3 版)》
3.1 串抽象数据类型
3.1.1 串的基本概念
1. 串定义。 s= " "
2. 子串。 "at" 是 "data" 的子串。
3. 串比较。
两个串可比较是否相等,也可比较大小。
110 −nsss 
《数据结构( Java 版)(第 3 版)》
public interface SString
{ int length(); // 返回串的长度
char charAt(int i) // 返回第 i ( i≥0 )个字
符
SString concat(SString str); // 返回与 str 串连接生成
串
SString substring(int begin, int end);
// 返回串中字符序号从 begin 至 end-1 的
子串
void setCharAt(int i, char ch) // 设置第 i 个字符为
ch
SString insert(int i, SString str)// 在第 i 个字符处插入
str 串
3.1.2 串抽象数据类型
《数据结构( Java 版)(第 3 版)》
3.2 串的表示和实现
3.2.1 串的存储结构
3.2.2 字符串类 String
3.2.3 字符串类 StringBuffer
《数据结构( Java 版)(第 3 版)》
3.2.1 串的存储结构
1. 串的顺序存储结构
2. 串的链式存储结构
《数据结构( Java 版)(第 3 版)》
3.2.2 常量字符串类 String
1. String 类声明
public final class MyString implements
Comparable<MyString>,java.io.Serializable
{
private final char[] value;
// 字符数组,私有最终变量,只能赋值一
次
}
《数据结构( Java 版)(第 3 版)》
【例 3.1 】获得整数和实数字
符串表示的数值。
《数据结构( Java 版)(第 3 版)》
2. 连接串
《数据结构( Java 版)(第 3 版)》
3. 求子串
《数据结构( Java 版)(第 3 版)》
4. 比较串相等与大小
《数据结构( Java 版)(第 3 版)》
5. String 串的插入、删除操
作
( 1 )在 s1 串的 i 位置插入 s2 串
《数据结构( Java 版)(第 3 版)》
( 2 )删除串中序号从 begin
至 end-1 的子串
【例 3.2 】获得一个整数的二进制或十六
进制形式字符串。
《数据结构( Java 版)(第 3 版)》
3.2.3 变量字符串类
StringBuffer
public final class MyStringBuffer
implements java.io.Serializable
{
private char[] value; // 字符数
组
private int len; // 串长
度
}
《数据结构( Java 版)(第 3 版)》
1. 插入串
《数据结构( Java 版)(第 3 版)》
2. 删除子串
《数据结构( Java 版)(第 3 版)》
3.3 串的模式匹配
3.3.1 Brute-Force 算法
3.3.2 KMP 算法
《数据结构( Java 版)(第 3 版)》
3.3.1 Brute-Force 算法
1. Brute-Force 算法描述与实现
《数据结构( Java 版)(第 3 版)》
2. 模式匹配应用
( 1 )替换子串
《数据结构( Java 版)(第 3 版)》
( 2 )删除子串
《数据结构( Java 版)(第 3 版)》
3. Brute-Force 算法分析
《数据结构( Java 版)(第 3 版)》
3.3.2 KMP 算
法
1. 目标串不回溯
《数据结构( Java 版)(第 3 版)》
2. KMP 算法描述( a )
( b )
《数据结构( Java 版)(第 3 版)》
2. KMP 算法描述( c )
《数据结构( Java 版)(第 3 版)》
2. KMP 算法描述( d )
《数据结构( Java 版)(第 3 版)》
3. 求 next 数组
表 3-1 模式串 "abcabc" 的 next 数组
j 0 1 2 3 4 5
模式串 a b c a b c
" " 中最长相
同前后缀子串的长度
k
−1 0 0 0 1 2
0 1 1
1 0
[ ]
0¡Ü £¼ ÇÒʹ" ... " " ... "µÄ×î´ó ÕûÊýk j k j
j
next j
k k j p p p p− − −
− =
= 
=
4. KMP 算法实现
110 −jppp 
《数据结构( Java 版)(第 3 版)》
5. 计算 next 数组的递推算
法
表 3-2 模式串 "abcabdabcabcaa" 的 next
数组
"
j 0 1 2 3 4 5 6 7 8 9 10 11 12 13
模式串 a b c a b d a b c a b c a a
"p0…pj−1" 中最长
相同的前后缀子串
长度 k
-1 0 0 0 1 2 0 1 2 3 4 5 3 4
《数据结构( Java 版)(第 3 版)》
6. 改进 next 数组
《数据结构( Java 版)(第 3 版)》
6. 改进 next 数组
表 3-3 模式串 "abcabc" 改进的 next 数组
j 0 1 2 3 4 5
模式串 a b c a b c
"p0
…pj−1
" 中最长相同的前
后缀子串长度 k
−1 0 0 0 1 2
pk
与 pj
比较 ≠ ≠ = = =
改进的 next[j] −1 0 0 −1 0 0
《数据结构( Java 版)(第 3 版)》
图 3-18 KMP 模式匹配过程( a ~
b )
《数据结构( Java 版)(第 3 版)》
图 3-18 KMP 模式匹配过程( c
~ e )
《数据结构( Java 版)(第 3 版)》
表 3-4  模式
串 "abcabdabcabcaa" 改进的
next 数组
j 0 1 2 3 4 5 6 7 8 9 10 11 12 13
模式
串
a b c a b d a b c a b c a a
串长 k -1 0 0 0 1 2 0 1 2 3 4 5 3 4
比较 ≠ ≠ = = ≠ = = = = = ≠ = ≠
改进
的
next[j]
-1 0 0 -1 0 2 -1 0 0 -1 0 5 -1 4
《数据结构( Java 版)(第 3 版)》
7.KMP 算法分析

More Related Content

Viewers also liked

Viewers also liked (15)

María fernanda gbi
María fernanda gbiMaría fernanda gbi
María fernanda gbi
 
CV-Europass-20160914-AldanaVéliz-ES
CV-Europass-20160914-AldanaVéliz-ESCV-Europass-20160914-AldanaVéliz-ES
CV-Europass-20160914-AldanaVéliz-ES
 
Lojas do Rio antigo
Lojas do Rio antigoLojas do Rio antigo
Lojas do Rio antigo
 
7.Guinot-me Carry bags
7.Guinot-me Carry bags7.Guinot-me Carry bags
7.Guinot-me Carry bags
 
Resume. Landrue Stephen Hill
Resume. Landrue Stephen HillResume. Landrue Stephen Hill
Resume. Landrue Stephen Hill
 
CV RESUME
CV RESUMECV RESUME
CV RESUME
 
Apostila de c ufmg
Apostila de c ufmgApostila de c ufmg
Apostila de c ufmg
 
Roboell
RoboellRoboell
Roboell
 
SCLA-Certificate
SCLA-CertificateSCLA-Certificate
SCLA-Certificate
 
Viver não dói
Viver não dóiViver não dói
Viver não dói
 
Powerwave CM1002-DBPXBC-005
Powerwave CM1002-DBPXBC-005Powerwave CM1002-DBPXBC-005
Powerwave CM1002-DBPXBC-005
 
Los 4 venenos blancos
Los 4 venenos blancosLos 4 venenos blancos
Los 4 venenos blancos
 
Cassandranewresume
CassandranewresumeCassandranewresume
Cassandranewresume
 
Practica las 7 maravillas
Practica las 7 maravillasPractica las 7 maravillas
Practica las 7 maravillas
 
Avances tecnológicos
Avances tecnológicosAvances tecnológicos
Avances tecnológicos
 

Similar to 第03章 串(java版)

第05章 数组和广义表(java版)
第05章  数组和广义表(java版)第05章  数组和广义表(java版)
第05章 数组和广义表(java版)Yan Li
 
淘宝前端优化
淘宝前端优化淘宝前端优化
淘宝前端优化锐 张
 
淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011Yiwei Ma
 
第02章 线性表(java版)
第02章  线性表(java版)第02章  线性表(java版)
第02章 线性表(java版)Yan Li
 
07 陣列與字串
07 陣列與字串07 陣列與字串
07 陣列與字串shademoon
 
第07章 图(java版)
第07章  图(java版)第07章  图(java版)
第07章 图(java版)Yan Li
 
卷積神經網路(Python+TensorFlow+Keras)
卷積神經網路(Python+TensorFlow+Keras)卷積神經網路(Python+TensorFlow+Keras)
卷積神經網路(Python+TensorFlow+Keras)Fuzhou University
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOpenSourceCamp
 
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)Yan Li
 
香港六合彩
香港六合彩香港六合彩
香港六合彩lopres
 
六合彩
六合彩六合彩
六合彩wivnw
 
大學部101級專題 cuda
大學部101級專題 cuda大學部101級專題 cuda
大學部101級專題 cuda迺翔 黃
 
Ch3第三單元
Ch3第三單元Ch3第三單元
Ch3第三單元zhan160
 
第08章 查找(java版)
第08章  查找(java版)第08章  查找(java版)
第08章 查找(java版)Yan Li
 
线程与并发
线程与并发线程与并发
线程与并发Tony Deng
 
快速了解PostgreSQL
快速了解PostgreSQL快速了解PostgreSQL
快速了解PostgreSQL正中 周
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.pptjames tong
 

Similar to 第03章 串(java版) (20)

第05章 数组和广义表(java版)
第05章  数组和广义表(java版)第05章  数组和广义表(java版)
第05章 数组和广义表(java版)
 
淘宝前端优化
淘宝前端优化淘宝前端优化
淘宝前端优化
 
淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011淘宝前台系统优化实践“吞吐量优化”-Qcon2011
淘宝前台系统优化实践“吞吐量优化”-Qcon2011
 
第02章 线性表(java版)
第02章  线性表(java版)第02章  线性表(java版)
第02章 线性表(java版)
 
07 陣列與字串
07 陣列與字串07 陣列與字串
07 陣列與字串
 
第07章 图(java版)
第07章  图(java版)第07章  图(java版)
第07章 图(java版)
 
卷積神經網路(Python+TensorFlow+Keras)
卷積神經網路(Python+TensorFlow+Keras)卷積神經網路(Python+TensorFlow+Keras)
卷積神經網路(Python+TensorFlow+Keras)
 
Jvm内存管理基础
Jvm内存管理基础Jvm内存管理基础
Jvm内存管理基础
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
 
第01章 绪论(java版)
第01章  绪论(java版)第01章  绪论(java版)
第01章 绪论(java版)
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
六合彩
六合彩六合彩
六合彩
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
Optimzing mysql
Optimzing mysqlOptimzing mysql
Optimzing mysql
 
大學部101級專題 cuda
大學部101級專題 cuda大學部101級專題 cuda
大學部101級專題 cuda
 
Ch3第三單元
Ch3第三單元Ch3第三單元
Ch3第三單元
 
第08章 查找(java版)
第08章  查找(java版)第08章  查找(java版)
第08章 查找(java版)
 
线程与并发
线程与并发线程与并发
线程与并发
 
快速了解PostgreSQL
快速了解PostgreSQL快速了解PostgreSQL
快速了解PostgreSQL
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.ppt
 

More from Yan Li

Chapter 01 essentials final
Chapter 01 essentials finalChapter 01 essentials final
Chapter 01 essentials finalYan Li
 
Chapter 05 essentials final
Chapter 05 essentials finalChapter 05 essentials final
Chapter 05 essentials finalYan Li
 
Chapter 04 essentials final
Chapter 04 essentials finalChapter 04 essentials final
Chapter 04 essentials finalYan Li
 
Chapter 02 essentials final
Chapter 02 essentials finalChapter 02 essentials final
Chapter 02 essentials finalYan Li
 
Chapter 03 essentials final
Chapter 03 essentials finalChapter 03 essentials final
Chapter 03 essentials finalYan Li
 
Introduction to om
Introduction to omIntroduction to om
Introduction to omYan Li
 
第10章 综合应用设计(java版)
第10章  综合应用设计(java版)第10章  综合应用设计(java版)
第10章 综合应用设计(java版)Yan Li
 
第09章 排序(java版)
第09章  排序(java版)第09章  排序(java版)
第09章 排序(java版)Yan Li
 
第06章 树和二叉树(java版)
第06章  树和二叉树(java版)第06章  树和二叉树(java版)
第06章 树和二叉树(java版)Yan Li
 

More from Yan Li (9)

Chapter 01 essentials final
Chapter 01 essentials finalChapter 01 essentials final
Chapter 01 essentials final
 
Chapter 05 essentials final
Chapter 05 essentials finalChapter 05 essentials final
Chapter 05 essentials final
 
Chapter 04 essentials final
Chapter 04 essentials finalChapter 04 essentials final
Chapter 04 essentials final
 
Chapter 02 essentials final
Chapter 02 essentials finalChapter 02 essentials final
Chapter 02 essentials final
 
Chapter 03 essentials final
Chapter 03 essentials finalChapter 03 essentials final
Chapter 03 essentials final
 
Introduction to om
Introduction to omIntroduction to om
Introduction to om
 
第10章 综合应用设计(java版)
第10章  综合应用设计(java版)第10章  综合应用设计(java版)
第10章 综合应用设计(java版)
 
第09章 排序(java版)
第09章  排序(java版)第09章  排序(java版)
第09章 排序(java版)
 
第06章 树和二叉树(java版)
第06章  树和二叉树(java版)第06章  树和二叉树(java版)
第06章 树和二叉树(java版)
 

第03章 串(java版)