大话数据结构(十一)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 串的链式存储结构

对于串的链式存储结构,与线性表结构相似,但由于串结构的特殊性,结构中的每个元素数据是一个字符,如果也简单应用链式表存储串值,一个结点对于一个字符,就会存在很大的空间浪费,因此,一个结点可以放一个字符,也可以考虑一个结点存放多个字符,最后一个结点偌未被占据,可以用“#”或者其他非字符串补全。

实际上,串的链式存储除了在连接串与串操作时有一定方便,总得来说不如顺序存储灵活,性能不如顺序存储好。

 

原文地址:https://www.cnblogs.com/snowwang/p/6090399.html