最长回文串

74 阅读1分钟

题目

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

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

  最长回文串

代码实现

class Solution {
    fun longestPalindrome(s: String): String {
        //1.定义变量
        val n = s.length
        if(s.length <= 1) return s
        var res = ""
        //定义一个n*n的boolean数组
        val dp = Array(n) { BooleanArray(n)}
        //2.定义转义公式
        //i和j位置的字符相等.同时i+1和j-1的dp为true或者j-i<=2
        //j-i<=2是表示两个字母挨着或者隔一个字符
        //j-i+1为当前的回文长度



//        for(i in 0 until n) {
//            for(j in 0 .. i) {
//                dp[i][j] = s[i] == s[j] && (i - j <=2 || dp[i-1][j+1])
//                if(dp[i][j] && i-j+1 > res.length) {
//                    res = s.substring(j,i+1)
//                }
//            }
//        }


        for(j in 0 until n) {
            for(i in 0..j) {
                dp[i][j] = s[i] == s[j] && (j-i <=2 || dp[i+1][j-1])
                if(dp[i][j] && j-i+1 > res.length) {
                    res = s.substring(i,j+1)
                }
            }
        }
        //3.返回值
        return res
    }
}