zoukankan      html  css  js  c++  java
  • 最长回文子串问题

    思路很简单,就是通过向两边扩展的方法,找出最大的,注意要分成奇数和偶数两种情况,都要计算才行。

     1 //最长回文子串,就是利用了回文数的另一种思想,从中间想两边扩展的思想,很有意思
     2 #include <iostream>
     3 using namespace std;
     4 
     5 int maxhuiwenzichuang(char * A,int n)
     6 {
     7     if(A==NULL||n<=0)
     8     {
     9         cout<<"wrong"<<endl;
    10         return -1;
    11     }
    12     int maxnum=0;
    13     for(int i=0;i<n;i++)
    14     {
    15         int j=0;
    16         while(i-j>=0&&i+j<=n-1)              //j从0开始扩展,有一个不满足就退出循环caba
    17         {
    18             if(A[i-j]==A[i+j])
    19                 j++;
    20             else                              //找到补登的也退出循环
    21                 break;
    22         }
    23         j--;                           //注意j多加了,要减一才行
    24         int jishu=2*j+1;               //奇数时个数
    25         if(jishu>maxnum)
    26             maxnum=jishu;
    27         j=0;
    28         while(i-j>=0&&i+j+1<=n-1)          //偶数情况如abbac
    29         {
    30             if(A[i-j]==A[i+j+1])
    31                 j++;
    32             else
    33                 break;
    34         }
    35         j--;
    36         int oushu=2*j+2;
    37         if(oushu>maxnum)
    38             maxnum=oushu;
    39     }
    40     return maxnum;
    41 }
    42 
    43 int main()
    44 {
    45     int n=8;
    46     char A[]={'a','b','b','a','c','a','b','b'};
    47     int max=maxhuiwenzichuang(A,8);
    48     if(max==-1)
    49         cout<<"wrong"<<endl;
    50     else
    51         cout<<"maxnum= "<<max<<endl;
    52     system("pause");
    53 }

    完!

  • 相关阅读:
    杜教筛
    虚树
    带修莫队
    线性基
    区间修改区间求和cdq分治
    矩阵快速幂求斐波那契数列
    点分治成品
    Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 1) C(二分+KMP)
    线性筛
    矩阵快速幂
  • 原文地址:https://www.cnblogs.com/zmlctt/p/3842710.html
Copyright © 2011-2022 走看看