您好,欢迎访问三七文档
第四章串一、选择题1.下面关于串的的叙述中,哪一个是不正确的?()(2分)A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储2若串S1=‘ABCDEFG’,S2=‘9898’,S3=‘###’,S4=‘012345’,执行concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2)))其结果为()(7分)A.ABC###G0123B.ABCD###2345C.ABC###G2345D.ABC###2345E.ABC###G1234F.ABCD###1234G.ABC###012343.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为()A.求子串B.联接C.匹配D.求串长(2分)4.已知串S=‘aaab’,其Next数组值为()。(2分)A.0123B.1123C.1231D.12115.串‘ababaaababaa’的next数组为()。A.012345678999B.012121111212C.011234223456D.01230123223456.字符串‘ababaabab’的nextval为()A.(0,1,0,1,04,1,0,1)B.(0,1,0,1,0,2,1,0,1)C.(0,1,0,1,0,0,0,1,1)D.(0,1,0,1,0,1,0,1,1)(2分)7.模式串t=‘abcaabbcabcaabdab’,该模式串的next数组的值为(),nextval数组的值为()。A.01112211123456712B.01112121123456112C.01110013101100701D.01112231123456712E.01100111011001701F.01102131011021701(2分)8.若串S=’software’,其子串的数目是()。(2分)A.8B.37C.36D.99.设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异的非平凡子串(非空且不同于S本身)的个数为()。A.2n-1B.n2C.(n2/2)+(n/2)D.(n2/2)+(n/2)-1E.(n2/2)-(n/2)-1F.其他情况10.串的长度是指()(3分)A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数二、判断题1.KMP算法的特点是在模式匹配时指示主串的指针不会变小。()(1分)2.设模式串的长度为m,目标串的长度为n,当n≈m且处理只匹配一次的模式时,朴素的匹配(即子串定位函数)算法所花的时间代价可能会更为节省。()(1分)3.串是一种数据对象和操作都特殊的线性表。()(1分)二、填空题1.空格串是指__(1)__,其长度等于___(2)__。(2分)2.组成串的数据元素只能是________。(1分)3.一个字符串中________称为该串的子串。(1分)4.INDEX(‘DATASTRUCTURE’,‘STR’)=________。(2分)5.设正文串长度为n,模式串长度为m,则串匹配的KMP算法的时间复杂度为________。6.模式串P=‘abaabcac’的next函数值序列为________。(2分)7.字符串’ababaaab’的nextval函数值为________。(2分)8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为__(1)__,又称P为__(2)__。(16/6分)9.串是一种特殊的线性表,其特殊性表现在__(1)__;串的两种最基本的存储方式是__(2)__、__(3)__;两个串相等的充分必要条件是__(4)__。(4分)10.两个字符串相等的充分必要条件是_______。(2分)11.知U=‘xyxyxyxxyxy’;t=‘xxy’;ASSIGN(S,U);ASSIGN(V,SUBSTR(S,INDEX(s,t),LEN(t)+1));ASSIGN(m,‘ww’)求REPLACE(S,V,m)=________。(5分)12.实现字符串拷贝的函数strcpy为:voidstrcpy(char*s,char*t)/*copyttos*/{while(________)}(3分)13.下列程序判断字符串s是否对称,对称则返回1,否则返回0;如f(abba)返回1,f(abab)返回0;intf((1)________){inti=0,j=0;while(s[j])(2)________;for(j--;ij&&s[i]==s[j];i++,j--);return((3)_______)}(3分)14.下列算法实现求采用顺序结构存储的串s和串t的一个最长公共子串。程序(a)PROCEDUREmaxcomstr(VARs,t:orderstring;VARindex,length:integer);VARi,j,k,length1:integer;con:boolean;BEGINindex:=0;length:=0;i:=1;WHILE(i=s.len)DO[j:=1;WHILE(j=t.len)DO[IF(s[i]=t[j])THEN[k:=1;length1:=1;con:=true;WHILEconDOIF(1)__THEN[length1:=length1+1;k:=k+1;]ELSE(2)_;IF(length1length)THEN[index:=i;length:=length1;](3)____;]ELSE(4)____;](5)___;]END;程序(b)voidmaxcomstr(orderstring*s,*t;intindex,length){inti,j,k,length1,con;index=0;length=0;i=1;while(i=s.len){j=1;while(j=t.len){if(s[i]==t[j]){k=1;length1=1;con=1;while(con)if(1)_{length1=length1+1;k=k+1;}else(2)__;if(length1length){index=i;length=length1;}(3)____;}else(4)___;}(5)__}}(10分)15.完善算法:求KMP算法中next数组。PROCget_next(t:string,VARnext:ARRAY[1..t.len]OFinteger);BEGINj:=1;k:=(1)__;next[1]:=0;WHILEjt.lenDOIFk=0ORt.ch[j]=t.ch[k]THENBEGINj:=j+1;k:=k+1;next[j]:=k;ENDELSEk:=(2)___;END;(4分)16.下面函数index用于求t是否为s的子串,若是返回t第一次出现在s中的序号(从1开始计),否则返回0。例如:s=‘abcdefcdek’,t=‘cde’,则indse(s,t)=3,index(s,’aaa’)=0。已知t,s的串长分别是mt,msFUNCindex(s,t,ms,mt);i:=1;j:=1;WHILE(ims)AND(jmt)DOIFs[i]=t[j]THEN[(1)__;(2)__]ELSE[(3)___;(4)_]IFjmtTHENreturn(5)____;ELSEreturn(6)__ENDF;(6分)17.阅读下列程序说明和pascal程序,把应填入其中的()处的字句写在答题纸上。程序说明:本程序用于判别输入的字符串是否为如下形式的字符串:W&M$其中,子字符串M是子字符串W的字符反向排列,在此假定W不含有字符&和字符$,字符&用作W与M的分隔符,字符$用作字符串的输入结束符。例如,对输入字符串ab&ba$、11&12$、ab&dd$、&$,程序将分别输出Ok.(是),No.(不是)。程序PROGRAMaccept(input,output);CONSTmidch=’&’;endch=’$’;VARan:boolean;ch:char;PROCEDUREmatch(VARanswer:boolean);VARch1,ch2:char;f:boolean;BEGINread(ch1);IFch1endchTHENIF(1)__THENBEGINmatch(f);IFfTHENBEGINread(ch2);answer:=(2)_ENDELSEanswer:=falseENDELSE(3)___ELSE(4)___END;BEGINwriteln(‘EnterString:’);match(an);IFanTHENBEGIN(5)__IF(6)_THENwriteln(‘Ok.’)ELSEwriteln(‘No.’)ENDELSEwriteln(‘No.’)END.(15分)18.试利用下列栈和串的基本操作完成下述填空题。initstack(s)置s为空栈;push(s,x)元素x入栈;pop(s)出栈操作;gettop(s)返回栈顶元素;sempty(s)判栈空函数;setnull(st)置串st为空串;length(st)返回串st的长度;equal(s1,s2)判串s1和s2是否相等的函数;concat(s1,s2)返回联接s1和s2之后的串;sub(s,i,1)返回s中第i个字符;empty(st)判串空函数FUNCinvert(pre:string;VARexp:string):boolean;{若给定的表达式的前缀式pre正确,本过程求得和它相应的表达式exp并返回“true”,否则exp为空串,并返回“false”。已知原表达式中不包含括弧,opset为运算符的集合。}VARs:stack;i,n:integer;succ:boolean;ch:char;BEGINi:=1;n:=length(pre);succ:=true;(1)__;(2)__;WHILE(in)ANDsuccDOBEGINch:=sub(pre,i,l);IF(3)_THEN(4)__ELSEIF(5)__THEN(6)_ELSEBEGINexp:=concat((7)___,(8)____);exp:=concat((9)___,(10)___);(11)__;END;i:=i+1END;IF(12)___THENBEGINexp:=concat(exp,sub(pre,n,1));invert:=trueENDELSEBEGINsetnull(exp);invert:=falseENDEND;注意:每个空格只填一个语句。四、应用题1.名词解释:串(3分)2.描述以下概念的区别:空格串与空串。(2分)3.两个字符串S1和S2的长度分别为m和n。求这两个字符串最大共同子串算法的时间复杂度为T(m,n)。估算最优的T(m,n),并简要说明理由。(6分)4.设主串S=‘xxyxxxyxxxxyxyx’,模式串T=‘xxyxy’。请问:如何用最少的比较次数找到T在S中出现的位置?相应的比较次数是多少?(8分)5.KMP算法(字符串匹配算法)较Brute(朴素的字符串匹配)算法有哪些改进?((2分)6.已知模式串t=‘abcaabbabcab’写出用KMP法求得的每个字符对应的next和nextval函数值。(10分)7.给出字符串‘abacabaaad’在KMP算法中的next和nextval数组。(5分)8.令t=‘abcabaa’,求其next函数值和nextval函数值。(6分)9.已知字符串‘cddcdececdea’,计算每个字符的next和nextval函数的值。10.试利用KMP算法和改进算法分别求p1=‘abaabaa’和p2=‘aabbaab’的next函数和nextval函数。(8分)11.已知KMP串匹配算法
本文标题:第4章串(习题)
链接地址:https://www.777doc.com/doc-2194621 .html