满意答案
gu0531
2013.04.17
采纳率:52% 等级:12
已帮助:13733人
ms可以O(n)
0 1 2 。。。i i+1 ...... j-1 j .....n
在满足i+1
a[i]==a[j],则继续,
如a[i]==a[j-1]或者a[i+1]=a[j]则需要插入,做一个需要插入的标记(如计数),同时移动相应的指针跳过不等的字符,继续比下去,直到两指针的前沿相遇并穿过(前沿能相遇并穿过说明小于4个字符了)。
按大概思路简单试了下,仅供参考:
#include "stdio.h"
#include "string.h"
int main()
{
int n;
char a[100]="abca";
int i,j,flag;
n=strlen(a);
i=0;
j=n-1;
flag=0; // characters qty need inserted
while ( (flag<2) // only need 0 or 1 character
&& ((i+1)<=(j-1)) // have character to compare
)
{
if (a[i]==a[j]) {i++; j--;}
else if (a[i]==a[j-1]) {flag++; i++; j-=2;}
else if (a[i+1]==a[j]) {flag++; i+=2; j--;}
else flag=2;
}
if (flag<2) printf("Y");
else printf("N");
return 0;
}
11分享举报