【C# 数据结构】string
C# 串的概念及类型定义
串是由n(n>=0)个字符a0,a1,a2,…,an-1组成的有限序列,记作:
String={a0,a1,a2,…,an-1}
其中,n表示串的字符个个数,称为串的长度。若n=0,则称为空串,空串不包含任何字符。
1.字符及字符串的编码与比较
每个字符根据所使用的字符集及编码方案会有一个特定的编码,最常用的字符集编码1是8位的ASCII码。为了能处理包括常用汉字在内的字符,C#采用16位的Unicode编码。
不同的字符在字符集编码中是按顺序排列编码的,字符可以按其编码次序规定它的大小,因此两个字符可以进行比较,例如:
'A'<'a' //比较结果为true
'9'>'A' //比较结果为false
对于两个字符串的比较,则按串中字符的次序,依次比较对应位置字符的大小,从而央定两个串的大小,例如:
"data"<"date"//比较结果为true
在C#语言中,char类型和 string 类型、都如同int和float等类型一样,是可比较的comparable)类型。
2.子串及子串在主串中的序号
由串的所有字符组成的序列即为串本身,又称为主串,而由串中若干个连续的字符组术的子序列则称为主串的一个子串(substring)。一般作如下规定:空串是任何串的子串;主串s也是自身的子串。除主串外,串的其他子串都称为真子串。例如,串s1“C#”是串2" data structure in C#”的真子串。
串s中的某个字符c的位置可用其在串中的位置序号整数表示,称为字符c在串s中的序号(index)。串的第一个字符的位置序号为0。一种特殊情况是,如果串s中不包含字符c,则称c在s中的序号为-1。
子串的序号是该子串的第一个字符在主串中的序号。例如,s1在s2中的序号为19。一种特殊情况是,如果串sub不是串mainstr 的子串,则称sub在mainstr中的序号为-1。
1、子串:串中任意个连续的字符组成的子序列称为该串的子串(连续、连续、连续!重要的事情说三遍)
备注:空串属于任何串的子串,主串也是自身的子串,出主串外的其他子窜称为真子串,
串的基本操作
substring:获取子窜
Concat:链接子窜
串的模式匹配
在主串中找到与模式串相同的子串,并返回其所在位置。
串的简单模式匹配算法
串的模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。
Index(S,T):定位操作。若主串S中存在与串T值相同的子串,则返回它在主串S中第一次出现的位置;否则函数值为0。
将主串中与模式串长度相同的子串搞出来,挨个与模式串对比
当子串与模式串某个对应字符不匹配时,就立即放弃当前子串,转而检索下一个子串
若模式串长度为m,主串长度为n,则直到匹配成功/匹配失败最多需要(n-m+1)*m 次比较最坏时间复杂度:o(nm)
最坏情况:每个子串的前m-1个字符都和模式串匹配,只有第m个字符不匹配比较好的情况:每个子串的第1个字符就与模式串不匹配
求解字符串所包含子串的个数
2、串中字符均不相同:n个字符构成的字符串,假设每个字符都不一样,问有多少个子串
答案:n(n+1)/2+1
友情提示:每个字符均不相同
解析:
包含1个字符的子串共n个
包含2个字符的子串共n-1个
包含3个字符的子串共n-2个
包含4个字符的子串共n-3个
.。。。。。
包含n个字符的子串共1个
空串1个
综上所述:子串个数共:1+2+3+。。。+n+1(空串)=n(n+1)/2+1