大话数据结构(十一)java程序——串
1、串的定义
串(String):是由零个或多个字符组成的有限序列,又名为字符串。
一般记为s=“a1a2a3.........an"(n>=0),其中,s是串名称,用双引号括起来的字符序列,ai(1<=i<=n),可以是字母,数字或者其他字符,i表示该字符在串中的位置。
串中字符数目n称为串的长度,零个字符数目n称为空串,它的长度为零,可以直接用“”表示,也可用希腊字母Φ表示。
所谓序列,说明串的相邻字母之间具有前驱和后继的关系。
空格串:是只包含空格的串,与空串是有区别的,空格串是有内容有长度的,而且可以不止一个空格。
子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。
子串在主串中的位置是子串的第一个字符在主串中的序号。
2、串的比较
串中更多的是查找子串位置,得到指定位置的子串,替换子串等。
一个普通的查找主串中是否存在子串,且返回出现第一个这样的子串在s中的位置
package com.alice.dataStructe5.compare;
public class StringCompare {
/**
* 查找子串在主串中第一次出现的位置
* @param s
* @param t
* @return
*/
public int StringIndex(String s,String t){
int n,m;
int index=0;
n = s.length();//主串长度
m = t.length();//子串长度
try{
for(int i=0; i< n-m+1;i++){//主串固定不动
int j = 0;
while(j< m){//子串进行比较
if(s.charAt(i) == t.charAt(j)){
j++;
}else{
break;
}
}
index++;
}
}catch(Exception e){
System.out.println("没有子串");
}
return index-m+1;
}
public static void main(String args[]){
String str = "abecabcd";
String sub = "abc";
StringCompare sc = new StringCompare();
System.out.println(sc.StringIndex(str, sub));
System.out.println(str.indexOf(sub));
}
}
3、串的存储结构
串的存储结构与线性表相同,分为两种。
3.1 串的顺序存储结构
串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的。按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。一般用数组来定义。
3.2 串的链式存储结构
对于串的链式存储结构,与线性表结构相似,但由于串结构的特殊性,结构中的每个元素数据是一个字符,如果也简单应用链式表存储串值,一个结点对于一个字符,就会存在很大的空间浪费,因此,一个结点可以放一个字符,也可以考虑一个结点存放多个字符,最后一个结点偌未被占据,可以用“#”或者其他非字符串补全。
实际上,串的链式存储除了在连接串与串操作时有一定方便,总得来说不如顺序存储灵活,性能不如顺序存储好。
大话数据结构(十一)java程序——串的更多相关文章
- Java程序员从笨鸟到菜鸟全部博客目录
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 大学上了一年半,接触java也一年半了,虽然中间也有其他东西的学习,但是还是以java为主 ...
- Java程序员进击书籍推荐
计算机基础 计算机科学导论 计算机操作系统 操作系统原理及应用(Linux) Java 基础和进阶 疯狂Java讲义 Java 核心基础卷1/2 Java编程思想 Java 8实战 jls11 Eff ...
- 《Java程序员由笨鸟到菜鸟》
<Java程序员由笨鸟到菜鸟> 在众多朋友的支持和鼓励下,<Java程序员由菜鸟到笨鸟>电子版终于和大家见面了.本电子书涵盖了从java基础到javaweb开放框架的大部分内容 ...
- 【Java】 大话数据结构(8) 串的模式匹配算法(朴素、KMP、改进算法)
本文根据<大话数据结构>一书,实现了Java版的串的朴素模式匹配算法.KMP模式匹配算法.KMP模式匹配算法的改进算法. 1.朴素的模式匹配算法 为主串和子串分别定义指针i,j. (1)当 ...
- 大话数据结构(八)Java程序——双向链表的实现
线性链表--双向链表 双向链表定义: 双向链表(double linked list): 是在单表单的每个结点中,再设置一个指向前驱结点的指针域.因此,在双向链表中的结点都有两个指针域,一个指向前驱, ...
- 【Java】 大话数据结构(1) 线性表之顺序存储结构
本文根据<大话数据结构>一书,实现了Java版的顺序存储结构. 顺序存储结构指的是用一段地址连续的存储单元一次存储线性表的数据元素,一般用一维数组来实现. 书中的线性表抽象数据类型定义如 ...
- 【Java】 大话数据结构(2) 线性表之单链表
本文根据<大话数据结构>一书,实现了Java版的单链表. 每个结点中只包含一个指针域的链表,称为单链表. 单链表的结构如图所示: 单链表与顺序存储结构的对比: 实现程序: package ...
- 【Java】 大话数据结构(3) 线性表之静态链表
本文根据<大话数据结构>一书,实现了Java版的静态链表. 用数组描述的链表,称为静态链表. 数组元素由两个数据域data和cur组成:data存放数据元素:cur相当于单链表中的next ...
- 【Java】 大话数据结构(5) 线性表之双向链表
本文根据<大话数据结构>一书,实现了Java版的双向链表. 在每个数据结点中都有两个指针,分别指向直接后继和直接前驱,这样的链表称为双向链表. 双向链表的结构如图所示: 查找元素可以根据元 ...
随机推荐
- poj 3517 约瑟夫环
最简单的约瑟夫环,虽然感觉永远不会考约瑟夫环,但数学正好刷到这部分,跳过去的话很难过 直接粘别人分析了 约瑟夫问题: 用数学方法解的时候需要注意应当从0开始编号,因为取余会等到0解. 实质是一个递推, ...
- 2-SAT问题及其算法
原文地址:http://www.cppblog.com/MatoNo1/archive/2011/07/13/150766.aspx [2-SAT问题]现有一个由N个布尔值组成的序列A,给出一些限制关 ...
- 理解ASP.NET 5的中间件
今天推荐的这篇文章,讲述了如何实现和使用ASP.NET 5的中间件. 虽然在ASP.NET 5中,微软没有再强调OWIN(Open Web Interface for .NET)及其微软官方的OWIN ...
- ML 04、模型评估与模型选择
机器学习算法 原理.实现与实践——模型评估与模型选择 1. 训练误差与测试误差 机器学习的目的是使学习到的模型不仅对已知数据而且对未知数据都能有很好的预测能力. 假设学习到的模型是$Y = \hat{ ...
- HDU 1796 How many integers can you find 容斥入门
How many integers can you find Problem Description Now you get a number N, and a M-integers set, y ...
- 关于Strut2内置Json插件的使用
配置注意点: 在原有Struts2框架jar包的引入下,需要额外多加一个Json的插件包(struts2-json-plugin-2.3.7.jar) 在struts.xml配置文件中,包需要继承js ...
- reqSUB错误
---- ERROR ---- Error in dispatcher subroutine reqSUB: Invalid PAR(1): 0502 上面是用adams/ca加载一个汽车模型时 ...
- BZOJ3249 : [ioi2013]game
线段树套Treap 外层的线段树需要动态开节点 内层Treap需要注意的是,相同y坐标的点不一定是同一个点,所以需要再次离散 空间$O(n\log n)$ 时间$O(n\log^2n)$ #inclu ...
- Guaranteeing message processing —— 可靠的消息处理
Storm's reliability API: how Storm guarantees that every message coming off a spout will be fully pr ...
- 推荐一个非常COOL的开源相册程序!
不知道大家有没想过有一个完全属于自己的网络相册?现在网上的相册程序已可以说多不胜数,那么到底要使用哪个会比较好呢? 之前我也在为此事烦恼过,在网上找了很多个程序试了,但都没达到我的要求,后来发终于功夫 ...