达内LOGO和北京达内网址达内科技培训项目:Java培训 3G培训 Android培训 软件测试培训北京达内服务电话
C++培训
C++中实现较大回文子串--达内培训
c++中实现最大回文子串
    01.// huiwen.cpp : 定义控制台应用程序的入口点。
    02.//
    03.
    04.#include "stdio.h"
    05.#include "stdlib.h"
    06.#include "iostream"
    07.
    08.using namespace std;
    09.
    10.bool isHuiwen(char * str);
    11.bool isHuiwen2(char * ps, char * pn);
    12.char * findBiggestHuiwen(char * str);
    13.
    14.
    15.int main(int argc, char * argv[])
    16.{
    17.    char str[] = "123456";
    18.
    19.    cout《sizeof(str)《endl;
    20.    bool result = isHuiwen(str);
    21.    cout《str《":"《result《endl;
    22.
    23.    char str2[] = "123456654321";
    24.    bool result2 = isHuiwen(str2);
    25.    cout《str2《":"《result2《endl;
    26.
    27.    char str3[] = "123454321";
    28.    bool result3 = isHuiwen(str3);
    29.    cout《str3《":"《result3《endl;
    30.
    31.    char str4[] = "abcde123321d";
    32.    char * p = findBiggestHuiwen(str4);
    33.    cout《str4《":"《p《endl;
    34.
    35.    char str5[] = "123454321abcdefg";
    36.    char * p1 = findBiggestHuiwen(str5);
    37.    cout《str5《":"《p1《endl;
    38.
    39.    system("pause");
    40.    return 0;
    41.}
    42.
    43.char * findBiggestHuiwen(char * str)
    44.{
    45.    char * presult;
    46.    char * ps = str;
    47.    char * pn = str;
    48.    while(*pn != '\0') pn++;
    49.    pn--;
    50.
    51.    int max = 0;
    52.
    53.    while(ps < pn)
    54.    {
    55.        // 判断以ps开始的每一个字符串
    56.        // 移动pn获取以ps开始的每个字符串
    57.        char * pend = pn;
    58.        while(pend > ps)
    59.        {
    60.            if(isHuiwen2(ps, pend))
    61.            {
    62.                int length = pend - ps + 1;
    63.                if(max < length)
    64.                {
    65.                    max = length;
    66.                    presult = ps;
    67.                }
    68.            }
    69.
    70.            pend--;
    71.        }
    72.
    73.        ps++;
    74.    }
    75.
    76.    char * result = (char *)malloc(sizeof(char)*(max + 1));
    77.    for(int i = 0; i < max; i++)
    78.        result[i] = *presult++;
    79.    result[max] = '\0';
    80.    return result;
    81.}
    82.
    83.bool isHuiwen2(char * ps, char * pn)
    84.{
    85.    if(ps >= pn) return false;
    86.    while(ps <= pn)
    87.    {
    88.        if(*ps != *pn)
    89.            break;
    90.        else
    91.        {
    92.            ps++;
    93.            pn--;
    94.        }
    95.    }
    96.
    97.    if(ps <= pn) return false;
    98.    else return true;
    99.}
    100.
    101.
    102.bool isHuiwen(char * str)
    103.{
    104.    if(str == NULL) return false;
    105.    if(strlen(str) <= 1) return false;
    106.
    107.    char * ps = str;
    108.    char * pn = str;
    109.    while(*pn != '\0')
    110.        pn++;
    111.    pn--;
    112.
    113.    while(ps<=pn)
    114.    {
    115.        if(*ps != *pn)
    116.            break;
    117.        else
    118.        {
    119.            ps++;
    120.            pn--;
    121.        }
    122.    }
    123.
    124.    if(ps<=pn) return false;
    125.    else return true;
    126.}