有模式 *A*A'* ,其中*表示任意子字符串(可以是空串),A也表示任意子字符串(也可以是空串),A'是A的逆序,例如假设A是23ad4那么A'就是4da32。
这样,任意字符串都符合这个模式,而且会有多个匹配方法,例如字符串
13412432145
可以匹配为 1 34 1 2432145 其中A=1
也可以匹配为 1 34 12 43 2145 其中A=34
也可以匹配为 13 412 43 214 5 其中A=412
问题:写一个程序,输入任意字符串X=*A*A'*,求长度最大的A
例如输入 13412432145 则最大长度A=412,长度等于3
这样,任意字符串都符合这个模式,而且会有多个匹配方法,例如字符串
13412432145
可以匹配为 1 34 1 2432145 其中A=1
也可以匹配为 1 34 12 43 2145 其中A=34
也可以匹配为 13 412 43 214 5 其中A=412
问题:写一个程序,输入任意字符串X=*A*A'*,求长度最大的A
例如输入 13412432145 则最大长度A=412,长度等于3
解决方案 »
- 忽然想到要是同行公司派出卧底打入内部怎么办?
- 请教UNICODE编译的工程下LPCSTR类型转换问题(在线等着 急用...)
- vc 用鼠标拖动窗体上的图形?
- build OmniORB时出现Cannot open include file: 'omniORB3/CORBA.h',是啥意思?
- VC不能实现增量编译
- 基础问题:想问一下,stdafx文件的全拼怎么写,cstring类的包含文件是什么,一定是“stdafx.h”吗?
- 来者有分加!!(200)
- 求教,VC应用程序和Web服务器交互
- 怎样播放falsh文件
- 如何制作带回调函数参数的函数在Dll中,20分
- 急求关于COleVariant的数据转换问题!!在线等
- 如何调用dll中的类(简单问题,等待中)
int A[N] = { 1,3,4,1,2,3,4,2,1,4,5};void main()
{
int start,end,m,max,s1,s2,e1,e2,i,j;
s1 = s2 = e1 = e2 = max = 0;
for(start = 0; start < N-1; start++)
for(end = N-1; end > start; end--)
{
i = start; j = end; m = 0;
while(i < j && A[i] == A[j])
{
m++; i++; j--;
}
if(m>max)
{
max = m;
s1 = start; s2 = i-1;
e1 = j+1; e2 = end;
}
}
//print result
printf("length of max string:%d\n",max);
while(max > 0 && s1 <= s2)
printf("%d",A[s1++]);
printf("\n");
while(max > 0 && e1 <= e2)
printf("%d",A[e1++]);
printf("\n");
}
如果没有时空限制,比较简单。