数据结构——串

串的比较:
串的比较实际是串中字符的编码。
字符编码——字符在对应字符集中的序号。

ASCII编码 8位二进制 256
中文等其他语言采用:Unicode编码 16位二进制表示一个字符

1.当字符串1中的串长小于字符串2的串长,并且字符串1包含在字符串2中,则字符串1小于字符串2.
str1 = “caohai”;
str2 = “cao”;
str1>str2;

2.出去相等的字符,在第一个不相等的字符处比较其ASCAII码,谁的ASCAII码大谁就大;
str1 = “caohai”;
str2 = “caoren”;
str1>str2;

串的顺序存储结构:
串的顺序存储结构是用一组地址连续的存储空间来存储串中的字符序列。

串的匹配模式算法:
BF算法:
首先通过比较主串和子串的第一个字符是否相等如果相等则比较第二个字符,如果第二个字符相等,依次比较之后的字符。如果遇到不相等的字符,主串的下标回溯到第二个字符并与子串的第一个字符相比较,如果相等则比较主串第三个字符和子串的第二个字符,以此类推。由于主串的下标一直在变化,直到直到子串之后返回最后下标减去子串长度。
在这里插入图片描述

int i = pos;
int j = 1;
while(i <= sLEn && j <= tLen){
	if(S[i] == T[j]){
		i++;
		j++;
    }else{
		i = i-j+2;    //主串下标回溯
		j = 1;		
 	}
}    //遍历查找之后如果子串的下标超过子串的长度则说明找到该子串
if(j>tLen){   
	return i-tLen;
}else{
	return 0;
}

KMP算法:
消除重复的比较提高效率。每趟匹配过程中出现字符比较不等时,不回溯主指针i,利用已得到的部分匹配结果将模式向右滑动尽可能远的一段距离,继续进行比较。

字符串前缀:除去最后一个字符外,一个字符串的全部头部组合
字符串后缀:除去第一个字符外,一个字符串的全部尾部组合

a 前缀:无 后缀: 无
aa 前缀:a 后缀: a 最大共有长度1
aaa 前缀:a,aa 后缀: a,aa 最大共有长度2
aaaa 前缀:a,aa,aaa 后缀: a,aa,aaa 最大共有长度3
aaaac 前缀:a,aa,aaa 后缀:c,ac,aaac 最大共有长度0

void Getnext(int next[],String t)
{
   int j=0,k=-1;
   next[0]=-1;
   while(j<t.length-1)
   {
      if(k == -1 || t[j] == t[k])
      {
         j++;k++;
         next[j] = k;
      }
      else k = next[k];
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值