中易网

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

答案:5  悬赏:70  
解决时间 2021-02-14 23:43
C语言 判断能否通过去掉0个或1个字符使得字符串成为回文串
最佳答案
两种思路,第一种是枚举,你首先判断原串是否是回文串,不是的的话就枚举每个可能插入的位置,插入一个字符X,看看是否构成回文串(最多枚举81个位置)。字符X如何确定?无非是看在原串中出现了哪些字符,对这些字符进行枚举。(最多枚举80个,你可以利用一些条件缩小枚举范围)如果字符串长度为n,本算法复杂度为O(n^3)。由于本问题字符串最多不超过80个字符,规模比较小,所以不会超时。
第二种方法,我自己猜的,你可以试一下对不对。求出原串 a 的逆串 b,保存起来。记字符串 a 的长度为 l1,对字符串 a 和 b 求一次最长公共子序列长度,记为 l2,如果 l1-l2 的结果是 0 或者 1 的话,就输出 Y。
全部回答
多定义一个指针同时判断不久行了。
#include <stdio.h>
#include <string.h>
bool Isrev(char *s) {
int i,n = strlen(s);
for(i = 0;i < (n + 1)/2;i++) if(s[i] != s[n - i - 1]) return false;
return true;
}
int main() {
char s[81],t[81],ch;
int len;
printf("请输入一个串:");
gets(s);
if(Isrev(s)) printf("%s是回文串!\n\n",s);
else {
len = strlen(s);
for(int i = 0; i < len; ++i) {
strcpy(t,s);
ch = t[i];
for(int j = i; j < len; ++j) t[j] = t[j + 1];
if(Isrev(t)) {
printf("去除字符第%d个'%c'后,%s是回文串!\n\n",i + 1,ch,t);
return 0;
}
}
printf("%s不是回文串!\n\n",s);
}
return 0;
}
ms可以O(n)
012。。。ii+1...... j-1 j .....n
在满足i+1<j-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;
}
比如输入字符串存入str[];
strlen()求长度,设为n;
for(int i=0; i<n/2; i++)
{
比较str[i]与str[n-1-i]//字符串从0开始
不一致即不可能;设置一个不一致的标记;
}
如果不一致的标记为0,就表示完全可以,或者中间只差一个字符,--〉ok
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
淘宝上哪家的玻璃杯好
富邦装饰怎么去啊,有知道地址的么
我女朋友21岁,4月28做的人流和宫颈糜烂手术
RO双刀刺客怎样配点?以及装备要怎样?(有BOSS
今年!!!考研北师大心理系有什么要求,需要
交通银行(中山支行)(甬港北路樱花园对面)地址
华为官网上买了一台手机今天想退可以吗
姐妹们觉得去皱眼霜哪个牌子好呀?
河北省高速公路张涿张家口管理处怎么去啊,有
什么叫性窒息死亡?
关于花的日记20字
正宗高码头羊肉汤地址在哪,我要去那里办事
一般的蚂蚁可以泡开水喝吗?
鸣记炭火烤全鱼地址在什么地方,想过去办事
房屋出租时间20年,如只是按照现有的租金递增
推荐资讯
小荷艺术培训中心在什么地方啊,我要过去处理
人流2个半月 只来1次月经, 用测试棒 有2条杠
力什么神什么的成语
收复6国的不是秦始皇吗
蜻蜓,树,鱼和青蛙四类 小学生一年级数学分成
全部扇区克隆和有效数据克隆有什么不同
家里装了无线上网,用了一个月才发现wifi没有
想知道: 黔西南布依族苗族自治州 从黔西南布
历史上哪个朝代的退休待遇最好
我们房东,家里三房分别租给三户租客,在走廊
富利华服饰广场在哪里啊,我有事要去这个地方
万里石油经营部在哪里啊,我有事要去这个地方
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?