美文网首页
打卡-最长回文子串

打卡-最长回文子串

作者: A邱凌 | 来源:发表于2020-05-23 17:25 被阅读0次

最长回文子串(中等)

import kotlin.math.max

class LongestPalindrome {
    /*
    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    示例 2:

    输入: "cbbd"
    输出: "bb"
    */
    /*
    * 1.中心扩散  不太想写这个 就是判断每一个点最大的回文数 算出start和end  判断max
    * 2.动态规划
    * */
    fun longestPalindrome(s: String): String {
        if (s.length <= 1) {
            return s
        }
        var arr = Array(s.length) { BooleanArray(s.length) }
        var charArr = s.toCharArray()
        for (i in 0..s.length - 1) {
            arr[i][i] = true
        }
        var maxLength: Int = 0
        var beginIndex: Int = 0
        for (right in 1..s.length - 1) {
            for (left in 0..right-1) {
                if (charArr[left] != charArr[right]) {
                    arr[left][right] = false
                } else {
                    if (right - left < 3) {
                        arr[left][right] = true
                    } else {
                        arr[left][right] = arr[left + 1][right - 1]
                    }
                }

                if (arr[left][right] and (right - left+1 > maxLength)) {
                    maxLength = right - left + 1
                    beginIndex = left
                }
            }
        }
        if (beginIndex == 0 && maxLength == 0) {
            return s.substring(0, 1)
        }
        return s.substring(beginIndex, beginIndex + maxLength)
    }

    fun isPalindrome(s: String): Boolean {
        var result = true
        for (index in 0..s.length / 2) {
            if (s[index] != s[s.length - index - 1]) {
                result = false;
            }
        }
        return result
    }
}

fun main() {
    println(LongestPalindrome().longestPalindrome("aabaa"))
}

相关文章

  • 最长回文子串

    最长回文子串——Manacher 算法 1. 问题定义 最长回文字符串问题:给定一个字符串,求它的最长回文子串长度...

  • 字符串算法

    最长公共前缀 最长回文串 最长回文子序列 最长公共子串 反转单词顺序列 反转字符串 字符串转数字 IP-int互转

  • 打卡-最长回文子串

    最长回文子串(中等)

  • 最长回文子序列

    该问题区别于最长回文子串,子串必须是连续的,而子序列则可以跳跃,例如AABCAA的最长回文子串为AA,但是它的最长...

  • Manacher算法

    最长回文子串问题# 给定一个字符串,找出最长的回文子串,如"waabwswbfd",则最长子串为bwsb. 中心试...

  • 最长回文子串问题—Manacher算法

    最长回文串问题是一个经典的算法题。 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度。如果...

  • LeetCode 第647题:回文子串

    1、前言 2、思路 此题与最长回文子串很像,只不过那个是求最长的回文子串,而这个是求回文子串的数目。但是他们的解法...

  • C语言实现求最长回文子串

    最长回文子串的概念 回文串是指正序和反序都一样的字符串,例如:Str1 = "AbbA",则Str1的最长回文子串...

  • Manacher's Algorithm算法分析Java

    Manacher's Algorithm俗称马拉车算法,对于求字符串中最长回文子串效率极高。 在求最长回文子串的时...

  • Manacher 算法学习笔记

    前言 给定一个字符串,求出其最长回文子串。例如:s="abcd",最长回文长度为 1;s="ababa",最长回文...

网友评论

      本文标题:打卡-最长回文子串

      本文链接:https://www.haomeiwen.com/subject/dejlahtx.html