题解 | #最长回文子串#

最长回文子串

https://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507

package main

import (
    "fmt"
)

func main() {
    // 获取输入并初始化结果
    var input string
    fmt.Scan(&input)
    res:=""
    // 现学的动态规划
    dp := make([][]bool, len(input))
    // 初始化这个二维数组
    for i:=0;i<len(input);i++{
        dp[i]=make([]bool, len(input))
    }
    // 反向遍历顺带进行判断
    // 外围的反向遍历是因为正常遍历的话dp[i+1][j-1]这个值拿不到,可以自己画个图验证一下
    for i:=len(input)-1;i>=0;i--{
        // 内部遍历
        for j:=i;j<len(input);j++{
            if i==j{
                // 相等的话就是意味在同一个位置上
                dp[i][j]=true
            }else if j-i==1{
                // 这边是长度为2的子字符,需要判断一下input的i和j位置上的两个字符是否一样
                dp[i][j]=input[i]==input[j]
            }else{
                // 大于2的字符串除了判断两段,还要判断去除两段的部分是否回文
                dp[i][j]=(input[i]==input[j])&&dp[i+1][j-1]
            }
            // 判断一下最大长度
            // 这边的j-i+1是要处理ji重叠的情况,彼时长度至少是1
            if dp[i][j]&&(j-i+1)>len(res){
                // 截取i到j,golang字符串截取最右边不包括,所以要加一
                res=input[i:j+1]
            }
        }
    }
    fmt.Println(len(res))

}

全部评论

相关推荐

04-22 13:08
门头沟学院 HTML5
Data_Seven:真不知道这些企业哪来的成就感
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务