1. 程式人生 > 其它 >2020-8:實現瀏覽器內多個標籤頁之間通訊的4種方式(html5 & JavaScript)

2020-8:實現瀏覽器內多個標籤頁之間通訊的4種方式(html5 & JavaScript)

技術標籤: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));


歡迎有志之士一起來學習
在這裡插入圖片描述