亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

最大對稱字符串的算法

2020-01-26 16:21:06
字體:
來源:轉載
供稿:網友

算法一:O(n^3)

判斷字串是否對稱是從外到里, O(n)


復制代碼 代碼如下:

#include <stdio.h>
#include <string.h>

/*
 *判斷起始指針,到結束指針的字符串是否對稱
 */
int IsSymmetrical(char* pBegin, char* pEnd)
{
    if(pBegin == NULL || pEnd == NULL || pBegin > pEnd)
    return 0;

    while(pBegin < pEnd)
    {
    if(*pBegin != *pEnd)
        return 0;
    pBegin++;
    pEnd--;
    }
    return 1;
}

/*
 *查找最大對稱字串長度,時間復雜度是O(n^3)
 */
int GetLongestSymmetricalLength(char* pString)
{
    if(pString == NULL)
    return 0;
    int symmetricalLength = 1;
    char* pFirst = pString;
    int length = strlen(pString);

    while(pFirst < &pString[length-1])
    {
    char* pLast = pFirst + 1;
    while(pLast <= &pString[length-1])
    {
        if(IsSymmetrical(pFirst, pLast))
        {
        int newLength = pLast - pFirst + 1;
        if(newLength > symmetricalLength)
            symmetricalLength = newLength;
        }
        pLast++;
    }
    pFirst++;
    }
    return symmetricalLength;
}

int main()
{
    char* str = "google";
    int len = GetLongestSymmetricalLength(str);
    printf("%d", len);
    return 0;
}


算法2: O(n^2)

判斷字串是否對稱是從外到里, O(1)

復制代碼 代碼如下:

#include <stdio.h>
#include <string.h>


int GetLongestSymmetricalLength(char* pString)
{
    if(pString == NULL)
    return 0;
    int symmetricalLength = 1;

    char* pChar = pString;
    while(*pChar != '/0')
    {
    //奇數長度對稱, 如 aAa
    char* left = pChar - 1;
    char* right = pChar + 1;
    while(left >= pString && *right != '/0' && *left==*right)
    {
        left--;
        right++;
    }
    int newLength = right - left - 1;   //退出循環是*left!=*right
    if(newLength > symmetricalLength)
        symmetricalLength = newLength;

    //偶數長度對稱, 如 aAAa
    left = pChar;
    right = pChar + 1;
    while(left >= pString && *right != '/0' && *left==*right)
    {
        left--;
        right++;
    }
    newLength = right - left - 1;   //退出循環是*left!=*right
    if(newLength > symmetricalLength)
        symmetricalLength = newLength;

    pChar++;
    }

    return symmetricalLength;
}

int main()
{
    char* str = "google";
    int len = GetLongestSymmetricalLength(str);
    printf("%d", len);
    return 0;
}

算法3:manacher算法

 原串:abaab
新串:#a#b#a#a#b#
這樣一來,原來的奇數長度回文串還是奇數長度,偶數長度的也變成以‘#'為中心的奇數回文串了。
接下來就是算法的中心思想,用一個輔助數組P記錄以每個字符為中心的最長回文半徑,也就是P[i]記錄以Str[i]字符為中心的最長回文串半徑。P[i]最小為1,此時回文串為Str[i]本身。
我們可以對上述例子寫出其P數組,如下
新串: # a # b # a # a # b #
P[]  :  1 2 1 4 1 2 5 2 1 2 1
我們可以證明P[i]-1就是以Str[i]為中心的回文串在原串當中的長度。
證明:
1、顯然L=2*P[i]-1即為新串中以Str[i]為中心最長回文串長度。
2、以Str[i]為中心的回文串一定是以#開頭和結尾的,例如“#b#b#”或“#b#a#b#”所以L減去最前或者最后的‘#'字符就是原串中長度的二倍,即原串長度為(L-1)/2,化簡的P[i]-1。得證。

注: 不是很懂, 自己改了

復制代碼 代碼如下:

#include <stdio.h>
#include <string.h>

int GetLongestSymmetricalLength(char* pString)
{
    int length = strlen(pString);
    char* pNewString = malloc(2*length+2);
    int i;
    for(i=0; i<length; i++)
    {
    *(pNewString+i*2) = '#';
    *(pNewString+i*2+1) = *(pString+i);
    }
    *(pNewString+2*length) = '#';
    *(pNewString+2*length+1) = '/0';

    printf("%s/n", pNewString);
    int maxLength = 1;
    char* pChar;
    for(i=0; i<2*length+2; i++)
    {
    int newLength = 1;
    pChar = pNewString + i;
    char* left = pChar-1;
    char* right = pChar+1;
    while(left>=pNewString && *right!='/0'&& *left==*right)
    {
        left--;
        right++;
        newLength++;
    }
    if(newLength > maxLength)
        maxLength = newLength;
    }

    return maxLength-1;
}

int main()
{
    char* str = "google";
    int len = GetLongestSymmetricalLength(str);
    printf("%d", len);
    return 0;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩中文字幕综合视频| 国产精品美女免费视频| 91国产高清在线| 久久久久久亚洲精品中文字幕| 亚洲精品自拍视频| 欧美在线视频一二三| 欧美精品精品精品精品免费| 国产欧美日韩专区发布| 国产精品96久久久久久又黄又硬| 欧美日韩国产区| 欧美成人久久久| 成人福利在线视频| 蜜臀久久99精品久久久无需会员| 国产一区二区丝袜高跟鞋图片| 国自产精品手机在线观看视频| 色一情一乱一区二区| 91国内免费在线视频| 美日韩精品视频免费看| 亚洲偷熟乱区亚洲香蕉av| 日本亚洲精品在线观看| 成人字幕网zmw| 中文字幕亚洲欧美日韩2019| 国产精品美女免费视频| 久久久成人精品视频| 欧美激情中文网| 中国人与牲禽动交精品| 精品亚洲va在线va天堂资源站| 成人a免费视频| 91久久久国产精品| 国产91九色视频| 欧美日韩在线一区| 欧美成人一二三| 国产成人一区二区在线| 欧美色videos| 国产噜噜噜噜久久久久久久久| 欧美xxxx18性欧美| 国产精品电影在线观看| 国产一区二中文字幕在线看| 国产99视频精品免视看7| 国产在线视频2019最新视频| 亚洲欧洲一区二区三区在线观看| 国内精品久久久| 亚洲精品国产品国语在线| 亚洲精品久久久久久久久久久久| 尤物精品国产第一福利三区| 97精品伊人久久久大香线蕉| 国产999视频| 色综合久久天天综线观看| 日韩在线www| 久久久久久国产精品美女| 97香蕉超级碰碰久久免费的优势| 亚洲色图偷窥自拍| 国产一区二区黑人欧美xxxx| 欧美专区在线观看| 国产精品黄色av| 亚洲国产精品资源| 久久福利视频导航| 精品国产乱码久久久久久婷婷| 久久精品国产亚洲精品2020| 亚洲欧洲午夜一线一品| 欧美性猛交xxxxx水多| 精品国产福利在线| 国产精品久久久久久久久久久不卡| 精品爽片免费看久久| 51视频国产精品一区二区| 亚洲一区二区三区视频播放| 欧美另类69精品久久久久9999| 亚洲免费视频在线观看| 日韩欧美999| 亚洲天堂一区二区三区| 欧美丝袜美女中出在线| 精品毛片三在线观看| 91精品国产高清| 欧美性猛交xxxx偷拍洗澡| 尤物99国产成人精品视频| 91精品视频免费看| 亚洲天堂男人的天堂| 亚洲成年人影院在线| 亚洲第一福利网| 日韩二区三区在线| 欧美在线视频网站| 97国产精品免费视频| 日韩av在线免费观看一区| 成人福利视频网| 成人av电影天堂| 国产午夜精品一区理论片飘花| 热99久久精品| 欧美巨乳美女视频| 久久亚洲综合国产精品99麻豆精品福利| 国产一区二区视频在线观看| 亚洲国产精品推荐| 91社区国产高清| 国产99久久精品一区二区 夜夜躁日日躁| 中文字幕亚洲欧美| 国产精品久久久久久久久久久久| 欧美区在线播放| 全亚洲最色的网站在线观看| 久青草国产97香蕉在线视频| 欧美日韩福利在线观看| 国产91精品网站| 国产精品女人网站| 亚洲欧洲一区二区三区久久| 国产精品99免视看9| 午夜精品久久久久久久99黑人| 国产97人人超碰caoprom| 国产成人在线一区| 久久福利视频导航| 韩日欧美一区二区| 亚洲精品国产拍免费91在线| 国内成人精品视频| 亚洲国产精品一区二区久| 精品一区二区三区三区| 国产精品久久91| 国产不卡在线观看| 国产精品狼人色视频一区| 国产主播喷水一区二区| 国产精品久久久久高潮| 91在线免费视频| 久久99热精品这里久久精品| 18一19gay欧美视频网站| 日韩中文字幕在线精品| 久久av中文字幕| 操91在线视频| 九九九热精品免费视频观看网站| 欧美激情亚洲视频| 亚洲午夜久久久影院| 欧美人与物videos| 日本在线观看天堂男亚洲| 国产精品国模在线| 欧美理论电影在线播放| 日日狠狠久久偷偷四色综合免费| 欧美激情一区二区三区在线视频观看| 美女国内精品自产拍在线播放| 欧亚精品在线观看| 欧美大荫蒂xxx| 欧美做爰性生交视频| 欧美亚洲日本网站| 亚洲精品久久久久中文字幕欢迎你| 欧美精品精品精品精品免费| 青草青草久热精品视频在线观看| 日韩电影中文字幕在线观看| 国产一区私人高清影院| 国产福利精品在线| 国产视频精品xxxx| 欧美成人剧情片在线观看| 欧美激情第6页| 俺去啦;欧美日韩| 91精品国产综合久久香蕉922| 欧美精品18videosex性欧美| 夜色77av精品影院| 萌白酱国产一区二区| 性欧美xxxx视频在线观看| 成人黄色免费片| 国产精品扒开腿爽爽爽视频| 欧美性猛交xxxx乱大交蜜桃| 91精品国产综合久久久久久久久| 姬川优奈aav一区二区| 色婷婷综合成人| 欧美片一区二区三区| 亚洲加勒比久久88色综合| 欧美高清不卡在线| 欧美成在线视频| 亚洲欧美在线看| 美日韩在线视频|