javascript初探LeetCode之5.Longest Palindromic Substring

題目

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

example

Input: "babad"
Output: "bab"
Note: "aba" is also a valid answer.
Input: "cbbd"
Output: "bb"

分析

這是leetcode上的第5題杠纵,難度為Medium荠耽,是要找出給定字符串的最長回文子串,很容易想到有兩種情況:

  • 1比藻、奇數(shù)長度的回文子串铝量,以當前遍歷元素為中心向兩邊擴散,比如題目給出的第一個例子
  • 2韩容、偶數(shù)長度的回文子串款违,以當前遍歷元素和其后一位元素為中心,向兩邊擴散群凶,比如題目給出的第二個例子插爹。
    首先想到的是雙重循環(huán),首先是循環(huán)遍歷字符串的每個字符请梢,然后向兩邊擴散也需要一重循環(huán)赠尾。

js實現(xiàn)

不帶注釋版:

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    var arr = s.split('');
    var start = 0, end = 0;
    for(let i = 0; i< arr.length; i++){
        for(let j = 1; j <= i && i + j < arr.length; j++){
            if(arr[i-j] == arr[i+j]){
                if( 2 * j > end - start){
                    start = i - j;
                    end = i + j;
                }
                else continue;
            }
            else break;
        }
        if(i < arr.length - 1 && arr[i] == arr [i+1]){
            if(end - start < 2){
                start = i;
                end = i + 1;
            }
            for(let j = 1; j <= i && i + j +1 < arr.length; j++){
                if(arr[i-j] == arr[i +j +1]){
                    if(2 * j + 2 > end - start +1){
                        start = i - j;
                        end = i + j + 1;
                    }
                    else continue;
                }
                else break;
            }
        }
    }
    return s.substring(start,end + 1);
};

帶注釋版:

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    var arr = s.split('');//轉成數(shù)組,直接對s進行操作并不會縮短執(zhí)行時間
    var start = 0, end = 0;//記錄回文串起始
    for(let i = 0; i< arr.length; i++){//遍歷s
        for(let j = 1; j <= i && i + j < arr.length; j++){//注意邊界,i-j不超出左邊界毅弧,i+j不超出右邊界
            if(arr[i-j] == arr[i+j]){//對稱字符相等
                if( 2 * j > end - start){//判斷是不是最長
                    start = i - j;
                    end = i + j;
                }
                else continue;//不是就跳下次循環(huán)
            }
            else break;//對稱字符一旦不同凡蜻,跳出循環(huán)
        }
        if(i < arr.length - 1 && arr[i] == arr [i+1]){//回文串長度為偶數(shù)時
            if(end - start < 2){//在上面if里已經(jīng)有對稱相同的字符了澜沟,就需要看需不需要改寫start矾兜、end
                start = i;
                end = i + 1;
            }
            for(let j = 1; j <= i && i + j +1 < arr.length; j++){//循環(huán)向兩邊擴散檩帐,注意邊界
                if(arr[i-j] == arr[i +j +1]){//對稱字符相同
                    if(2 * j + 2 > end - start +1){//判斷是不是最長
                        start = i - j;
                        end = i + j + 1;
                    }
                    else continue;//不是就跳下次循環(huán)
                }
                else break;//對稱字符一旦不同,跳出循環(huán)
            }
        }
    }
    return s.substring(start,end + 1);//返回最長回文子串
};

總結

求解最長回文子串思路還是很清晰的元咙,注意一下邊界就行梯影,還有就是js中substring(start, end)函數(shù)是截取的字符串包括index=start的元素,但不包括index=end的元素庶香,所以return時甲棍,end+1了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末赶掖,一起剝皮案震驚了整個濱河市感猛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奢赂,老刑警劉巖陪白,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異呈驶,居然都是意外死亡拷泽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門袖瞻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來司致,“玉大人,你說我怎么就攤上這事聋迎≈茫” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵霉晕,是天一觀的道長庭再。 經(jīng)常有香客問我,道長牺堰,這世上最難降的妖魔是什么拄轻? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮伟葫,結果婚禮上恨搓,老公的妹妹穿的比我還像新娘。我一直安慰自己筏养,他們只是感情好斧抱,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渐溶,像睡著了一般辉浦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茎辐,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天宪郊,我揣著相機與錄音,去河邊找鬼拖陆。 笑死弛槐,一個胖子當著我的面吹牛,可吹牛的內容都是我干的慕蔚。 我是一名探鬼主播丐黄,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼孔飒!你這毒婦竟也來了灌闺?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤坏瞄,失蹤者是張志新(化名)和其女友劉穎桂对,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸠匀,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蕉斜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宅此。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡机错,死狀恐怖,靈堂內的尸體忽然破棺而出父腕,到底是詐尸還是另有隱情弱匪,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布璧亮,位于F島的核電站萧诫,受9級特大地震影響,放射性物質發(fā)生泄漏枝嘶。R本人自食惡果不足惜帘饶,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望群扶。 院中可真熱鬧及刻,春花似錦、人聲如沸穷当。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馁菜。三九已至茴扁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汪疮,已是汗流浹背峭火。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留智嚷,地道東北人卖丸。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像盏道,于是被迫代替她去往敵國和親稍浆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容