国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

LeetCode.5 最長回文子串(longest-palindromic-substring)(J

Steven / 2227人閱讀

摘要:一題目最長回文子串給定一個字符串,找到中最長的回文子串。你可以假設(shè)的最大長度為。示例輸入輸出注意也是一個有效答案。

一、題目

最長回文子串:

給定一個字符串 s,找到 s 中最長的回文子串。你可以假設(shè) s 的最大長度為 1000。

示例 1:

輸入: "babad"
輸出: "bab"
注意: "aba" 也是一個有效答案。

示例 2:

輸入: "cbbd"
輸出: "bb"

二、我的答案

思路

1.排除法,最優(yōu)解法肯定不是暴力遍歷
2.緊接著想到第三題中使用的兩個指針同步遍歷一個字符串的方法,嘗試了一下,發(fā)現(xiàn)跟暴力遍歷沒有區(qū)別
3.再看幾遍題,要找的是回文字符串,回文字符串的特點(diǎn)在于兩邊字符都相同,也就是說需要找的是兩邊字符都相同中間點(diǎn)(注意是中間點(diǎn)而不是中間字符,因?yàn)轭}干中例1的中間點(diǎn)是a,但是例2的中間點(diǎn)是bb)

代碼

v1.0(過于丑陋,可跳過直接看說明和v2.0)

   /**
    * @param {string} s
    * @return {string}
    */
    var longestPalindrome = function(s) {
     function expendString(index1, index2) {
       if(index1 > 0 && index2 + 1 < s.length &&s[index1 -1] === s[index2 + 1]){
         return expendString(index1 -1, index2 + 1)
       } else {
         return [index1, index2, index2 - index1]
       }
     }
     let longestArr = [0, 0, 0]
     let tempArr
     for(let i = 1; i< s.length; i++) {
       if(i + 1 < s.length&&s[i-1] === s[i+1]) {
         tempArr = expendString(i-1, i+1)
         tempArr[2] > longestArr[2] ? longestArr = tempArr : null
       }
       if(s[i -1] === s[i]) {
         tempArr = expendString(i - 1, i)
         tempArr[2] > longestArr[2] ? longestArr = tempArr : null
       }
     }
     return s.slice(longestArr[0], longestArr[1] + 1)
   };

講解

1. 函數(shù)expendString作用為以兩個傳參拓展字符串,判斷是否依然是回文字符串

2. 數(shù)組longestArr作用為防止當(dāng)前最長字串的兩個下標(biāo)和長度(我也不知道當(dāng)時自己為什么還要費(fèi)勁寫個數(shù)組)

3. for循環(huán)中判斷回文串的中點(diǎn)是一個("aba")還是兩個("abba"),然后分別調(diào)用上文定義的expendString函數(shù)進(jìn)行拓展

???????????通過,下一步要做的就是優(yōu)化成能看懂的版本

???????????v2.0

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s){
  function expendString(index1, index2) {
    if (index1 >= 0 && index2 < s.length && s[index1] === s[index2]) {
      expendString(index1 - 1, index2 + 1)
    } else {
      index2 - index1 > longestString.length ?
        longestString = s.slice(index1 + 1, index2) :
        null
    }
  }
  let longestString = s[0] || ""
  for (let i = 1; i < s.length; i++) {
    if (i + 1 < s.length) {
      expendString(i - 1, i + 1)
    }
    if (s[i - 1] === s[i]) {
      expendString(i - 1, i)
    }
  }
  return longestString
};

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/103288.html

相關(guān)文章

  • LeetCode代碼分析——5. longest-palindromic-substring(動態(tài)規(guī)

    摘要:題目描述給定一個字符串,找到中最長的回文子串。你可以假設(shè)的最大長度為。示例輸入輸出注意也是一個有效答案。示例輸入輸出思路分析暴力解法解決一個問題如果沒有思路,就要想辦法從簡單粗暴的解法開始,然后想辦法優(yōu)化它。 題目描述 https://leetcode-cn.com/probl... 給定一個字符串 s,找到 s 中最長的回文子串。你可以假設(shè)?s 的最大長度為 1000。 示例 1: ...

    neuSnail 評論0 收藏0
  • [算法總結(jié)] 搞定 BAT 面試——幾道常見的子符串算法題

    摘要:第一種方法常規(guī)方法。如果不存在公共前綴,返回空字符串。注意假設(shè)字符串的長度不會超過。說明本題中,我們將空字符串定義為有效的回文串。示例輸入輸出一個可能的最長回文子序列為。數(shù)值為或者字符串不是一個合法的數(shù)值則返回。 說明 本文作者:wwwxmu 原文地址:https://www.weiweiblog.cn/13s... 作者的博客站點(diǎn):https://www.weiweiblog.c...

    chanjarster 評論0 收藏0
  • Leetcode 5 Longest Palindromic Substring 最長回文子串

    摘要:難度題目是說給出一個字符串求出這個字符串的最長回文的子串回文是指前后完全對稱的字符串像是之類的都算是回文奇數(shù)字母的回文和偶數(shù)字母的回文中心是不一樣的奇數(shù)字母比如的中心在中間字母上偶數(shù)字母比如的回文在中間兩字母的中心上由此可見回文中心點(diǎn)實(shí)際上 Given a string s, find the longest palindromic substring in s. You may as...

    NotFound 評論0 收藏0
  • 最長回文子串——Manacher 算法

    摘要:問題定義最長回文子串問題給定一個字符串,求它的最長回文子串長度。可以采用動態(tài)規(guī)劃,列舉回文串的起點(diǎn)或者終點(diǎn)來解最長回文串問題,無需討論串長度的奇偶性。 0. 問題定義 最長回文子串問題:給定一個字符串,求它的最長回文子串長度。 如果一個字符串正著讀和反著讀是一樣的,那它就是回文串。下面是一些回文串的實(shí)例: 12321 a aba abba aaaa tatt...

    mingzhong 評論0 收藏0
  • 獲取最長回文子串

    摘要:以下是最長回文子串的相關(guān)代碼,相關(guān)邏輯已在注釋中注明我們原有的字符串可能存在兩種回文子串,一種是具有基數(shù)個元素例如一種是具有偶數(shù)個元素例如這樣的話分情況判斷比較復(fù)雜所以我們對原字符串進(jìn)行擴(kuò)充在相鄰元素中插入特殊值插入后的原基數(shù)回文子串變成了 以下是最長回文子串的Manacher‘s Algorithm相關(guān)代碼,相關(guān)邏輯已在注釋中注明: public static String solu...

    ymyang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<