LeetCode之Longest Palindromic Subsequence(Kotlin)

問題: git


方法: 算法的核心是動態規劃,從短串推導到長串,當s[i] = s[j]時,dp[i][j] = dp[i+1][j-1] + 2;當 s[i] = s[j]時,dp[i][j] = maxOf(dp[i+1][j], dp[i][j-1]),相似斐波那契數列的演算過程,最後輸出dp[0][s.lastIndex]即爲最終結果。github

具體實現:算法

class LongestPalindromicSubsequence {
    fun longestPalindromeSubseq(s: String): Int {
        if (s.isEmpty()) {
            return 0
        }
        val dp = Array(s.length) { Array(s.length) { 0 } }
        for (i in s.lastIndex downTo 0) {
            dp[i][i] = 1
            for (j in (i + 1)..s.lastIndex) {
                if (s[i] == s[j]) {
                    dp[i][j] = dp[i+1][j-1] + 2
                } else {
                    dp[i][j] = maxOf(dp[i+1][j], dp[i][j-1])
                }
            }
        }
        return dp[0][s.lastIndex]
    }
}

fun main(args: Array<String>) {
    val input = "bbbab"
    val longestPalindromicSubsequence = LongestPalindromicSubsequence()
    println(longestPalindromicSubsequence.longestPalindromeSubseq(input))
}
複製代碼

有問題隨時溝通bash

具體代碼實現能夠參考Githubui

相關文章
相關標籤/搜索