免费智能真题库 > 历年试卷 > 程序员 > 2014年上半年 程序员 上午试卷 综合知识
  第38题      
  知识点:      串的模式匹配
  关键词:   模式匹配   字符串        章/节:   常用数据结构   常用算法       

 
设有字符S和P,的模式匹配是指确定(38)。
 
 
  A.  P在S中首次出现的位置
 
  B.  S和P是否能连接起来
 
  C.  S和P能否互换
 
  D.  S和P是否相同
 
 
 

 
  第41题    2013年下半年  
   50%
在一棵非空的二叉排序树(二叉查找树)中,进行(41)遍历运算并输出所访问结点的关键码后,可得到一个有序序列。
  第38题    2013年下半年  
   60%
用链表作为栈的存储结构时,若要入栈操作成功,则(38)。
  第38题    2016年上半年  
   40%
某二叉树的先序遍历序列为ABCDFGE,中序遍历序列为BAFDGCE。以下关于该二叉树的叙述中,正确的是(38)。
 
  第41题    2011年下半年  
   34%
对于字符串“software”,其长度为2的子串共有(41)个。
  第35题    2015年上半年  
   47%
已知字符串s=“(x+y)*z”,其中,双引号不是字符串的内容,经过以下运算后,t3的值是(35)。
t1=SubString(s,3,1)
..
  第35题    2015年下半年  
   49%
以下关于字符串的叙述中,正确的是 (35)。
   知识点讲解    
   ·     · 串的模式匹配
 
       串
               串的基本概念
               串(String)是字符串的简称,是由零个或多个字符组成的有限序列,记为S="a1a2a3…an"。含零个字符的串(Null String)称为空串,用Φ表示。其他串称为非空串。任何串中所含字符的个数称为该串的长度(或串长)。空串的长度为0。
               串中任意连续的字符组成的子序列称为子串。主串是包含子串的串。两个串相等,当且仅当两个串值相等,即长度、位置都相等。空格也是串集合中的一个元素,多个空格组成空格串。
               在C语言中,串即为字符串。字符串常量是用一对双引号括住若干个字符来表示的。
               串的基本操作
               串的基本操作如下。
               .赋值assign(S, T):把T值赋给S。
               .串赋值strassign(S, chars):把一个字符串常量赋给串S,即生成一个其值等于chars的串S。
               .求长length(S):求串中字符的个数。
               .连接concat(S, T):将串T的值紧接着放在串S的末尾,组成一个新串。
               .求子串substr(Sub, S, start, length):求S从start位置开始,长度为length的子串。
               .替换replace(S, T, v):以v替换所有在S中出现的和T相等的串。
               .输出dispstr(S):其结果是输出串S的值。
               除了基本操作外,还有以下操作。
               .比较strcompare(S, T):S, T相等返回1,否则返回0。
               .定位index(S, T, pos):求子串在主串中位置的定位函数。
               .插入strinsert(S, pos, T):在串S的第pos个字符之前插入串T。
               .删除strdelete(S, pos, len):从串S中删除pos个字符起长度为len的子串。
               字符串的存储结构
               字符串通常是按照逐个字符的代码(最常用的字符是ASCII码)存于足够大的字符数组中。另外,每个字符的最后一个有效字符之后有一个字符串结束符,记为`\0`。
               在C语言中,常用的字符串存储结构分为:数组(顺序存储结构)和指针变量。还可通过链表作为存储结构。
 
       串的模式匹配
        子串(也称为模式串)在主串中的定位操作通常称为串的模式匹配,它是各种串处理系统中最重要的运算之一。
               基本的模式匹配算法
               该算法也称为布鲁特一福斯算法,其基本思想是从主串的第一个字符起与模式串的第一个字符比较,若相等,则继续下一对字符的比较,否则从主串的第二个字符起与模式串的第一个字符重新开始比较,直至模式串中每个字符依次和主串中的一个连续的字符序列相等时为止,此时称为匹配成功,否则称为匹配失败。
               【函数】以字符数组存储字符串,实现朴素的模式匹配算法。
               
               假设主串的长度为n,模式串的长度为m,下面分析朴素模式匹配算法的时间复杂度,位置序号从1开始计算。设从主串的第i个位置开始与模式串匹配成功,而在前i-1趟匹配中,每趟不成功的匹配都是模式串的第一个字符与主串中相应的字符不相同,则在前i-1趟匹配中,字符的比较共进行了i-1次,因第i趟成功匹配的字符比较次数为m,所以总的字符比较次数为(i-1+m)且1≤in-m+1。若在这n-m+1个起始位置上匹配成功的概率相同,则在最好情况下,匹配成功时字符间的平均比较次数为:
               
               因此,在最好情况下匹配算法的时间复杂度为On+m)。而在最坏的情况下,每一趟不成功的匹配都是模式串的最后一个字符与主串中相应的字符不相等。若第i趟匹配时成功,则前i-1趟不成功的匹配加上最后一趟成功的匹配,每趟的字符比较次数都是m次,总共比较了i×m次。因此,最坏情况下的平均比较次数为:
               
               由于n?m,所以该算法在最坏情况下的时间复杂度为On×m)。
               改进的模式匹配算法
               改进的模式匹配算法又称为KMP算法(由D.E.Knuth、V.R.Pratt和J.H.Morris提出),其改进之处在于:每当匹配过程中出现相比较的字符不相等时,不需要回溯主串字符的位置指针,而是利用已经得到的“部分匹配”的结果,将模式串向后“滑动”尽可能远的距离,再继续进行比较。此算法可在On+m)的时间内完成。
   题号导航      2014年上半年 程序员 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第38题    在手机中做本题