程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu3294(找最長回文串)

hdu3294(找最長回文串)

編輯:C++入門知識

#include<stdio.h>
#include<string.h>
char str[200009];
int main()
{
    int i,hed,end,e,j,maxlen,len;
    char ch;
    while(scanf("%c %s",&ch,str)==2)
    {
        getchar();
         maxlen=0;len=strlen(str);//一定,注意這個,如果是很長的字符串不能放在循環,就必須用len,不然每一次計算長度會超時
        for(e=0;e<len;e++)          //我每次超時就是在每次都計算str 的長度
        {
            for(i=0;e-i>=0&&2*i+1<len;i++)//找出長度是奇數的回文串
            {
                 if(str[e-i]!=str[e+i])
                    break;
                    if(2*i+1>maxlen)
                    {
                        maxlen=2*i+1;//回文串的長度
                        hed=e-i;//起始位置
                        end=e+i;//終了位置
                    }
            }

             for(i=0;e-i>=0&&2*i+2<len;i++)//找出長度是偶數的回文串
            {
                 if(str[e-i]!=str[e+i+1])
                    break;
                    if(2*i+2>maxlen)
                    {
                        maxlen=2*i+2;
                        hed=e-i;
                        end=e+i+1;
                    }
            }
        }

        if(end-hed>=2)
            {
                printf("%d %d\n",hed,end);
                for(i=hed;i<=end;i++)//這樣可以省時間,每次只寫出一段真正的回文字符串
                if(ch<=str[i])
                  printf("%c",str[i]-ch+'a');
                    else
                printf("%c",'z'-(ch-str[i])+1);
            }
        else
        printf("No solution!");

        printf("\n");
    }
    return 0;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved