c语言字符串去掉特殊符号回文,C语言 判断能否通过去掉0个或1个字符使得字符串成为回文串...

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

gu0531

2013.04.17

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率: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分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值