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

首頁 > 編程 > C > 正文

關于最大對稱字符串的算法

2020-02-24 14:35:11
字體:
來源:轉載
供稿:網友

抓住2018年的尾巴,我們的學習不能止步,本文將給大家講述的是關于最大對稱字符串的算法,需要的朋友可以參考下其中的內容詳情。

算法一:O(n^3)

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

?


#include
#include

?

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

??? while(pBegin ??? {
??? 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 ??? {
??? char* pLast = pFirst + 1;
??? while(pLast ??? {
??????? 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
#include

?


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
#include

?

int GetLongestSymmetricalLength(char* pString)
{
??? int length = strlen(pString);
??? char* pNewString = malloc(2*length+2);
??? int i;
??? for(i=0; 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??? {
??? 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
国产日韩亚洲欧美| 97人人模人人爽人人喊中文字| 久久露脸国产精品| 亚洲一区二区三区视频| 欧美日韩亚洲一区二区| 中文在线资源观看视频网站免费不卡| 欧美午夜激情小视频| 久久久久久尹人网香蕉| 亚洲欧美制服中文字幕| 亚洲激情电影中文字幕| 久久成人精品一区二区三区| 日本亚洲欧美三级| 国产精品成人aaaaa网站| 孩xxxx性bbbb欧美| 亚洲国产精品久久久久久| 日韩在线激情视频| 亚洲成人久久一区| 国产福利精品在线| 亚洲网站在线看| 欧美成人在线网站| 国产精品夫妻激情| 中文字幕久精品免费视频| 日本一区二三区好的精华液| 亚洲xxx自由成熟| 欧美电影在线免费观看网站| 国产精品国产自产拍高清av水多| 久久精品色欧美aⅴ一区二区| 91av在线视频观看| 九九热最新视频//这里只有精品| 成人黄色av网站| 亚洲国产黄色片| 91成人国产在线观看| 热99精品里视频精品| 欧美激情在线播放| 亚洲偷熟乱区亚洲香蕉av| 热99精品里视频精品| 国产一区二区黑人欧美xxxx| 欧美性猛交xxxx乱大交极品| 国产日韩欧美91| 国产亚洲成精品久久| 久久久久久久亚洲精品| 91精品视频专区| 久久精品久久久久电影| 91中文在线视频| 国产精品一区专区欧美日韩| 亚洲国产成人精品女人久久久| 色偷偷9999www| 成人激情黄色网| 国产精品成人品| 日本亚洲精品在线观看| 精品久久久久久中文字幕一区奶水| 精品一区二区三区四区| 欧美日韩人人澡狠狠躁视频| 亚洲性视频网址| 中文欧美日本在线资源| 欧美精品videos性欧美| 日本成人在线视频网址| 另类美女黄大片| 77777少妇光屁股久久一区| 成人免费网站在线| 97久久超碰福利国产精品…| 国产精品亚洲综合天堂夜夜| 欧美成人一区二区三区电影| 欧美日韩国产精品一区二区三区四区| 久久精彩免费视频| 国产精品99久久99久久久二8| 久久噜噜噜精品国产亚洲综合| 亚洲电影免费在线观看| 日韩专区在线观看| 国产精品亚洲一区二区三区| 中文字幕亚洲一区在线观看| 国产精品黄色av| 亚洲欧美在线一区| 欧美美最猛性xxxxxx| 亚洲成人999| 色在人av网站天堂精品| 国产视频精品免费播放| 国产精品电影观看| 久久精品视频免费播放| 亚洲免费av网址| 亚洲级视频在线观看免费1级| 久久久久中文字幕| 久久久精品久久久久| 国产拍精品一二三| 国产精品香蕉av| 亚洲日本欧美中文幕| 欧美与黑人午夜性猛交久久久| 国产日韩欧美夫妻视频在线观看| 蜜月aⅴ免费一区二区三区| 91午夜在线播放| 亚洲欧美日韩久久久久久| 亚洲国产成人av在线| 久久中文久久字幕| 亚洲人高潮女人毛茸茸| 91免费看片在线| 国产免费一区二区三区在线能观看| 色综合久久88色综合天天看泰| 亚洲精品国产精品国自产在线| 成人a级免费视频| 久99久在线视频| 亚洲成人网在线| 色青青草原桃花久久综合| 国产精品一区二区电影| 亚洲片在线资源| 亚洲性69xxxbbb| 一区二区三区四区视频| 久久精品国产成人精品| 亚洲一区999| 自拍亚洲一区欧美另类| 国产日韩欧美在线看| 理论片在线不卡免费观看| 国产亚洲美女久久| 欧美日韩成人精品| 日韩av一卡二卡| 亚洲天堂av综合网| 久久精品免费电影| 日韩中文视频免费在线观看| 欧美激情二区三区| 久久天天躁狠狠躁夜夜av| 亚洲国产精久久久久久久| 97视频国产在线| 97国产suv精品一区二区62| 国产精品福利在线观看| 丝袜亚洲欧美日韩综合| 久久久久久国产精品| 不卡在线观看电视剧完整版| 韩国一区二区电影| 成人精品网站在线观看| 久久免费视频在线观看| 国产91在线高潮白浆在线观看| 成人动漫网站在线观看| 欧美激情18p| 久久久久久香蕉网| 国产一区二区在线播放| 欧美激情高清视频| 国产精品极品美女在线观看免费| 日韩有码在线观看| 日韩一区二区福利| 中文字幕亚洲无线码在线一区| 亚洲电影免费观看高清完整版在线观看| 日韩在线视频国产| 亚洲欧洲激情在线| 欧美高清视频在线观看| 97久久精品国产| 亚洲男人av在线| 国产精选久久久久久| 亚洲性av在线| 国产精品久久久久久久久久东京| 久久伊人91精品综合网站| 欧美最猛黑人xxxx黑人猛叫黄| 欧美午夜视频一区二区| 日韩在线视频导航| 欧美性猛交xxxx富婆弯腰| 中文字幕亚洲欧美日韩高清| 欧美黑人国产人伦爽爽爽| 久久躁狠狠躁夜夜爽| 日韩精品在线影院| 国产精品大陆在线观看| 国产成人+综合亚洲+天堂| 亚洲第一福利网站| 国产一区二区免费| 欧美专区福利在线| 久久久99久久精品女同性| 国产网站欧美日韩免费精品在线观看|