• JS力扣刷题经典100题——最长回文子串


     给你一个字符串 s,找到 s 中最长的回文子串

    示例 1:

    输入:s = "babad"
    输出:"bab"
    解释:"aba" 同样是符合题意的答案。

    示例 2:

    输入:s = "cbbd"
    输出:"bb"

    提示:

        1 <= s.length <= 1000
        s 仅由数字和英文字母组成

    这题不看思路真做不出来。。。

    1. 理解题意
      • 题目给定一个字符串
      • 需要我们找到这个字符串中的最长回文串
      • 回文串:正着读和反着读都一样的字符串
    2. 整体思路
      • 我根据回文串的一个核心思想来解题:从中心点往两边扩散,来寻找回文串,这种方向相当于穷举每一个点为中心点
      • 如果回文串是奇数时,比如 "bab" ,它的中心点就只有一个 "a",所以从 "a" 开始向两边扩散
      • 如果回文串是偶数时,比如 "baab",它的中心点有两个 "aa",所以从 "aa" 开始向两边扩散
      • 编写一个辅助函数来寻找回文串,当中心点确定了之后调用辅助函数,直接返回找到的回文串
      • 将每次找到的回文串与之前的做对比,谁长就留谁
    1. /**
    2. * @param {string} s
    3. * @return {string}
    4. */
    5. var longestPalindrome = function(s) {
    6. let str = ""
    7. for(let i=0; ilength; i++){//abba
    8. //穷举中心点
    9. let subString1 = findHuiWen(s,i,i)
    10. let subString2 = findHuiWen(s,i,i+1)
    11. str = str.length > subString1.length ? str : subString1
    12. str = str.length > subString2.length ? str : subString2
    13. }
    14. return str
    15. };
    16. function findHuiWen(s, left, right){
    17. while(left >=0 && right < s.length) {
    18. if(s.charAt(left) == s.charAt(right)) {
    19. left--
    20. right++
    21. } else {
    22. break
    23. }
    24. }//执行结束left和right都回退一个,但是substring方法左闭右开[,),因此right保持不变
    25. return s.substring(left+1,right)
    26. }

    用到的知识点:

    String.prototype.charAt()

     charAt() 方法从一个字符串中返回指定的字符。

    str.charAt(index)

    String.prototype.substring()

    substring() 方法返回一个字符串在开始索引到结束索引之间的一个子集,或从开始索引直到字符串的末尾的一个子集。

    str.substring(indexStart[, indexEnd])
  • 相关阅读:
    PandaGPT部署演示
    小程序申请,商户号申请,微信支付开通操作流程
    Kafka-消息系统
    PyQt5应用开发-PyQt5对比其他python生态的界面开发工具
    x86汇编_压缩BCD码_DAA指令_DAS指令_笔记57
    【计算机组成原理】第三章 存储系统
    Spring_第2章_注解开发+整合Mybatis+Junit
    理清Spring事务的核心关键类
    使用正则表达式在中英文之间添加空格
    使用SwinUnet训练自己的数据集
  • 原文地址:https://blog.csdn.net/qq_36384657/article/details/128209457