LimerLim 2014-12-26 04:25 采纳率: 0%
浏览 1456

最大回文串问题,拜托各位了

我找很长时间了,就是找不到错误(可以编译,输出不对),拜托各位看一下,新人,没有悬赏分,感谢各位的回答

 #include<iostream>
#include<string.h>
#include<cctype>
using namespace std;
int main()
{
    char a[101], b[101];
    int c[101];

    while (cin.getline(a, 101))
    {
        int i,d, k, x,y,left, right, width , extence = 1, j;
        j = 0;//注意变量
        int len = strlen(a);
        for (i = 0; i<len; i++)//第一步,把字母转化为大写,并以#隔开,例如A#D#S#K
        {
            if (isalpha(a[i]))
            {
                if (j >= 1)  b[j++] = '#';

                c[j] = i;//整型数组C代表找到的字母在原文a中位置
                b[j++] = toupper(a[i]);
            }
        }//此时b的数组的最后一项是j-1

        for (k = 1; k <= j - 2; k++)//从第2项开始
        {
            for (width=1;; width++)
            {
                if ((b[k - width] != b[k + width]) || (k - width)<=-1 || (k + width)>=j) break;

            }
            //////////
            left = k - width + 1;
            right = k + width - 1;
            if (b[left] == '#')//保证回文两边必须是字母,而不是有#的存在
             {
                left+=1;
                right-=1;
             }
            //////////

            d=width+1;//回文字母的长度,只是字母,不包括#
            if(d>extence)//标记回文两边
            {
                extence=d;
                x=c[left];
                y=c[right];
            }
        }
        for(int s=x;s<=y;s++)
        cout<<a[s];
        cout<<endl;
     }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • bingbung 2014-12-26 05:41
    关注

    重新写一下吧,可以采用将按顺序切割成很多很多子字符串,再判断子字符串是否是回文,接着记录回文长度,然后就可以早到最大回文了。

    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?