两个字符串S1和S2的长度分别为m和n,求这两个字符串最大共同子串的时间复杂度为T(m,n),这最优的时间复杂度为()。

两个字符串S1和S2的长度分别为m和n,求这两个字符串最大共同子串的时间复杂度为T(m,n),这最优的时间复杂度为()。


相关考题:

●试题四阅读下列程序说明和C程序,将应填入(n)处的字句写在答卷纸的对应栏内。【程序说明】该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。【程序】#includestdio.hvoid strmerge(char*a,char*b,char*c)//将字符串a,b合并到字符串c中{char t,*w;w=c;while( (1) ){//找到字符串a,b当前字符中较小的字符if(*a*b){t=*a;(2) ;}else if(*a*b){t=*b;(3) ;}else//字符串a,b当前字符相等{t=*a;a++;b++;}if( (4) )//开始,可直接赋值*w=t;else if(t!=*w)//如果a,b中较小的当前字符与c中当前字符不相等,才赋值 (5) ;}if(*a!=\′\0′)//如果字符串a还没有结束,则将a的剩余部分赋给cwhile(*a!=′\0′)if(*a!=*w){*(++w)=*a;a++;}else(6) ;if(*6!=′\0′)//如果字符串b还没有结束,则将b的剩余部分赋给cwhile(*b!=′\0′)if(*b!=*w){*(++w)=*b;b++;}elseb++;(7) ;}void strsort(char*s)//将字符串S中的字符排序{int i,j,n;char t,*w;W=S;for(n=0;*w!=′\0′;n++)//得到字符串长度nw++;for(i=0;in-1;i++)//对字符串s进行排序,按字母先后顺序for(j=i+1;jn;j++)if( (8) ){t=s[i];s[i]=s[j]; (9) ;}}void main(){char s1[100],s2[100],s3[100];printf("\nPlease,input the first string:");scanf("%s",s1);printf("\nPlease input the second string:");scanf("%s",s2);strsort(s1);//将字符串s1排序strsort(s2);//将字符串s2排序printf("%s\n",s1);printf("%s\n",s2);s3[0]=′\0′;//字符串s3的第一个字符先置′\0′结束标志(10) //将s1和s2合并,按照字母顺序排列,//且要删去相同字符,存入s3中printf("%s",s3);}

设有如下定义:inta=1,b=2,c=3,d=4,m=2,n=2;则执行表达式:(m=ab)while(*y++);return(y-x-1);}的功能是() A、求字符串的长度B、比较两个字符串的大小C、将字符串x复制到字符串yD、将字符串X连接到字符串Y后面

编写一个函数fun(),它的功能是:实现两个字符串的连接(不使用库函数strcat,即把p2所指的字符串连接到p1所指的字符串后。例如,分别输入下面两个字符串:FirstStringSecondString则程序输出:FirstStringSecondString注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号小填入所编写的若干语句。试题程序:include <stdio. h>include<conio. h>void fun (char pi[],char p2[]){}main ( ){char s1[80],s2[40];clrscr ();printf("Enter s1 and s2:\n");scanf ("%s%s", s1, s2);printf ("s1=%s\n", s1);printf("s2=%s\n",s2);printf("Invoke fun(s1,s2) :\n");fun(s1,s2);printf("After invoking:\n");printf ("%s\n", s1);}

s1和s2已正确定义并分别指向两个字符串。若要求:当s1所指字符串大于s2所指字符串时,执行语句S;则以下选项中正确的是( )。A.if(sl>s2)S;B.if(strcmp(s1,s2))S;C.if(strcmp(s2,s1>0)S;D.if(strcmp)(s1,s2)>0)S;

阅读以下函数fun(char *sl,char *s2){ int i=0;while(sl[i]==s2[i]s2[i]!='\0') i++;return(sl[i]=='\0's2[i]=='\0');}此函数的功能是A.将s2所指字符串赋给s1B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

已知字符串S1中存放一段英文,写出算法format(s1,s2,s3,n),将其按给定的长度n格式化成两端对齐的字符串S2, 其多余的字符送S3。

阅读以下函数 fun(char *sl,char *s2) { int i:0; while(sl[i]==s2[i]s2[i]!='\0') i++; return(sl[i]=='\0's2[i]=='\0'); } 此函数的功能是A.将s2所指字符申赋给s1B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为oD.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为o

以下说法中错误的是A.strcpy(A,B)函数是将A字符串的内容复制到B字符串中B.strlen(cha*s)返回字符串S的长度,未尾的字符不计算在内C.char a[20]="string";中字符串长度为6D.strstr(S1,S2)函数在字符串S1中从左边开始查找字符串S2,若查找成功则返回S2在S1中首次出现的位置,否则返回NULL,如果S2为"",则返回S1。

判断字符串s1是否大于字符串s2,应该使用()。A.if(strcmp(s1,s2)s2)C.if(strcmp(s2,s1) 判断字符串s1是否大于字符串s2,应该使用( )。A.if(strcmp(s1,s2)<0)B.if(s1>s2)C.if(strcmp(s2,s1)<0)D.if(strcmp(s1,s2))

阅读以下函数: fun(char*s1, char*s2) { int i=0; while(s1[i]==s2[i] s2[i]!='\0') i++; return(s1[i]== s2{i)!=='\0'); } 此函数的功能是( )。A.将s2所指字符串赋给s1B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

读下列程序说明和C程序,将应填入(n)处。【程序说明】该程序定义了两个子函数strsort和strmerge。它们分别实现了将一个字符串按字母顺序排序和将两个字符串合并排序,并删去相同字符。在主函数里,先输入两个字符串s1和s2,然后调用strsort函数对它们分别排序,然后调用strmerge函数将s1和s2合并,将合并后的字符串赋给字符串s3,最后输出字符串s3。【程序】include<stdio.h>void strmerge(char,a,char *b,char *c) //将字符串a,b合并到字符串c中{char t,*w;w=c;while((1)){//找到字符串a,b当前字符中较小的字符if(*a< *b){t= *a;(2);{else if (*a>*b){t= *b;(3);}else //字符串a,b当前字符相等{t= *a;a++;b++;}if((4)) //开始,可直接赋值*w=t;else if(t!=*w)//如果a,b中较小的当前字符与c中当前字符不相等,才赋值(5);}if(*a!=\'\0') //如果字符串a还没有结束,则将a的剩余部分赋给Cwhile(*a!='\0')if(*a!=*w){*(++w)=*a;a++;}else(6);if(*6!='\0') //如果字符串b还没有结束,则将b的剩余部分赋给cwhile(*b!='\0')if(*b! = *w){*(++w)=*b;b++;}elseb++;(7);}void strsort(char*s) //将字符串S中的字符排序{int i,j,n;char t,*w;W=S;for(n=0;*w!='\0';n++) //得到字符串长度nw++;for(i=0;i<n-1;i++) //对字符串s进行排序,按字母先后顺序for(j=i+1;j<n;j++)if((8)){t=s[i];s[i]=s[j];(9);}}void main(){char s1[100],s2[100],s3[100];printf("\nPlease,input the first string:");scanf("%s",s1);printf("\nPlease input the second string:");scanf("%s",s2);strsort(s1); //将字符串s1排序strsort(s2); //将字符串s2排序printf("%s\n",s1);printf("%s\n",s2);s3[0]='\0'; //字符串s3的第一个字符先置'\0'结束标志(10) //将s1和s2合并,按照字母顺序排列,//且要删去相同字符,存入s3中printf("%s",s3);}

s1和s2已正确确定义并分别指向两个字符串。若要求:当s1所指字符串大于s2所指字符串时,执行语句S;则以下选项中正确的是( )。A.if(s1 > s2) S;B.if(strcmp(s1,s2)) S;C.if(strcmp(s2,s1)>0) S;D.if(stremp(s1,s2)>0) S;

下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST”要求的是( )。A.if(strcmp(s2,s1)==0)ST;B.if(s1===s2)ST;C.if(strcpy(s1,s2)==1)ST;D.if(s1,s2==0)ST;

阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。[说明]下面流程图的功能是:在给定的两个字符串中查找最长的公共子串,输出该公共子串的长度L及其在各字符串中的起始位置(L=0时不存在公共字串)。例如,字符串"The light is not bright tonight"与"Tonight the light is not bright"的最长公共子串为"he light is not bright",长度为22,起始位置分别为2和10。设A[1:M]表示由M个字符A[1],A[2],…,A[M]依次组成的字符串;B[1:N]表示由N个字符B[1],B[2],…,B[N]依次组成的字符串,M≥N≥1。本流程图采用的算法是:从最大可能的公共子串长度值开始逐步递减,在A、B字符串中查找是否存在长度为L的公共子串,即在A、B字符串中分别顺序取出长度为L的子串后,调用过程判断两个长度为L的指定字符串是否完全相同(该过程的流程略)。[流程图]

设char *s1, *s2;分别指向两个字符串,可以判断字符串s1和s2是否相等的表达式为()A、s1=s2B、s1==s2C、strcpy(s1,s2)==0D、strcmp(s1,s2)==0

为了判断两个字符串s1和s2是否相等,应当使用()A、if(s1==s2)B、if(s1=s2)C、if(strcmp(s1,s2))D、if(strcmp(s1,s2)==0)

若REPLACE(S,S1,S2)表示用字符串S2替换字符串S中的子串S1的操作,则对于S=“Beijing&Nanjing”,S1=“Beijing”,S2=“Shanghai”,REPLACE(S,S1,S2)=()。A、“Nanjing&Shanghai”B、“Nanjing&Nanjing”C、“ShanghaiNanjing”D、“Shanghai&Nanjing”

欲将字符串S1复制到字符串S2中,其语句是()。

判断字符串s1是否大于字符串s2,错误的使用有()A、if(strcat(s1,s2)==1)B、if(strcat(s2,s1)0)C、if(s1s2)D、if(strcat(s1,s2)0)

下面哪个表达式不能将两个字符串$s1和$s2串联成一个单独的字符串()。A、$s1+$s2B、“{$s1}{$s2}”C、$s1.$s2D、implode(‘’,array($s1,$s2))

以下哪些可以把字符串$s1和$s2组成一个字符串?()A、$s1+$s2B、“{$s1}{$s2}”C、$s1.$s2D、implode(‘’,array($s1,$s2))/

多选题以下哪些可以把字符串$s1和$s2组成一个字符串?()A$s1+$s2B“{$s1}{$s2}”C$s1.$s2Dimplode(‘’,array($s1,$s2))/

单选题为了判断两个字符串s1和s2是否相等,应当使用()Aif(s1==s2)Bif(s1=s2)Cif(strcmp(s1,s2))Dif(strcmp(s1,s2)==0)

填空题两个字符串S1和S2的长度分别为m和n,求这两个字符串最大共同子串的时间复杂度为T(m,n),这最优的时间复杂度为()。

单选题若REPLACE(S,S1,S2)表示用字符串S2替换字符串S中的子串S1的操作,则对于S=“Beijing&Nanjing”,S1=“Beijing”,S2=“Shanghai”,REPLACE(S,S1,S2)=()。A“Nanjing&Shanghai”B“Nanjing&Nanjing”C“ShanghaiNanjing”D“Shanghai&Nanjing”

单选题下面哪个表达式不能将两个字符串$s1和$s2串联成一个单独的字符串()。A$s1+$s2B“{$s1}{$s2}”C$s1.$s2Dimplode(‘’,array($s1,$s2))

单选题设char *s1, *s2;分别指向两个字符串,可以判断字符串s1和s2是否相等的表达式为()As1=s2Bs1==s2Cstrcpy(s1,s2)==0Dstrcmp(s1,s2)==0