2020-12-20|西瓜更新Cookies ttwid獲取方法
阿新 • • 發佈:2020-12-21
技術標籤:leetcode
題目 難度-中等
給定一個字串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度為 1000。
示例 1:
輸入: "babad"
輸出: "bab"
注意: "aba" 也是一個有效答案。
示例 2:
輸入: "cbbd"
輸出: "bb"
解題思路
1.明白迴文字串是什麼,左邊讀起與右邊讀起是一樣的,比如:上海自來水來自海上
2.如果字串小於2,直接返回字串
3.定義兩個變數,一個start儲存當前找到的最大回文字串的起始位置,另一個maxLength記錄字串的長度。終止位置就是start+maxLength;
4.建立一個help函式,來判斷左邊與右邊是否越界,是否相等,滿足條件則更新start,maxlength,left,right.繼續判斷,直到不滿足為止。
5.遍歷字串,每個位置呼叫help方法兩遍。因為遍歷的位置存在奇偶。
具體程式碼
const longestPalindrome = function (s) { if (s.length < 2) return s; let start = 0, maxLength = 1; const expandAroundCenter = function (left, right) { while (left >= 0 && right < s.length && s[left] === s[right]) { let len = (right - left) + 1; if (len > maxLength) { maxLength = len; start = left; } left--; right++; } } for (let i = 0; i < s.length; i++) { expandAroundCenter(i - 1, i + 1); expandAroundCenter(i, i + 1); } return s.substring(start, start + maxLength); } var s1 = "babbad"; console.log(longestPalindrome(s1)); var s2 = "上海自來水來自海上"; console.log(longestPalindrome(s2));
歡迎有志之士一起來學習