面试题:给定一个字符串,问是否能通过添加一个字母将其变为回文串

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define char_len 16

int huiwen(char str[])
{
        int str_len=strlen(str);
        int yushu=str_len%2;
        int mid_left,mid_right;
        if(yushu==1)
                mid_left=mid_right=str_len/2;
        else
        {
                mid_left=str_len/2-1;
                mid_right=str_len/2;
        }
        int i;
        char *p_left;
        char *p_right;
        if(yushu==1)
        {
                p_left=str+mid_left-1;
                p_right=str+mid_right+1;
        }
        else
        {
                p_left=str+mid_left;
                p_right=str+mid_right;
        }
        while(p_left>=str&&p_right<=str+str_len-1)
        {
                if(*p_left==*p_right)
                {
                        --p_left;
                        ++p_right;
                }
                else
                        return -1;
        }
        return 1;

}
int remove_char(char str[],int str_len,int index_remove,char dst_str[])
{
        int i=0,j;
                                              for(i=0,j=0;j<str_len;i++,j++)
        {
                if(i==index_remove)
                {
                        j+=1;
                }
                dst_str[i]=str[j];
        }
        dst_str[i]='\0';
        return 0;
}
int judge_huiwen(char str[])
{
        int str_len=strlen(str);
        int i=0;
        for(i=-1;i<str_len;i++)
        {
                char dst_str[char_len]={'0'};
                remove_char(str,str_len,i,dst_str);
                int ret=huiwen(dst_str);
                if(ret==1)
                {
                        printf("YES\n");
                        return 0;
                }

        }
        printf("NO\n");
        return -1;
}

int main()
{
        char str[char_len];
        printf("please input a string:\n");
        gets(str);
        judge_huiwen(str);

}

思路是通过删除字符,判断是不是回文 ( 或反转字符串,再比较)

转载于:https://www.cnblogs.com/woshare/p/6937665.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值