美文网首页Swift刷算法
Swift刷算法:最长的回文子串

Swift刷算法:最长的回文子串

作者: JonorZhang | 来源:发表于2022-06-26 20:00 被阅读0次

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

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

示例 2:
输入:s = "cbbd"
输出:"bb"

LeetCode:https://leetcode.cn/problems/longest-palindromic-substring

class Solution {
    func longestPalindrome(_ s: String) -> String {
        // swift字符串使用下标不方便使用,性能也很差
        let s = Array(s)
        // 最长回文的起止下标
        var res = (0, 0)

        // 分别枚举每个字符为中心的回文
        for i in 0 ..< s.count - 1 {
            // 以i为中心的最长回文:abcba
            let p1 = palindrome(i, i)
            if p1.1 - p1.0 > res.1 - res.0 {
                res = p1
            }
            // 以i和i+1为中心的最长回文:abccba
            let p2 = palindrome(i, i+1)
            if p2.1 - p2.0 > res.1 - res.0 {
                res = p2
            }
        }

        // 向两侧查找以i,j为中点的回文,当i==j时为奇数回文串
        func palindrome(_ i: Int, _ j: Int) -> (Int, Int) {
            // i,j字符不相等说明不是回文串,最长一个字符
            if s[i] != s[j] {
                return (i, i) 
            }

            // i,j同时向两侧查找到一个最长回文串
            var i = i, j = j
            while i >= 0, j < s.count, s[i] == s[j] {
                i -= 1
                j += 1
            }
            // i,j字符不等了,需要两端各减1才是回文的区间
            return (i + 1, j - 1)
        }

        // 将区间转为字符串
        return String(s[res.0 ... res.1])
    }
}
image.png

相关文章

  • Swift刷算法:最长的回文子串

    给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = "babad"输出:"bab"解释:"ab...

  • 最长回文子串

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

  • Manacher's Algorithm算法分析Java

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

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

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

  • 《最长回文子串》

    python算法题之《最长回文子串》 题目要求 代码及解析 结果

  • iOS面试题汇总---算法类

    字符串 【3】最长回文子串 【3】最长无重复子串 【1*】字符串转数字 【4】KMP 算法 【2】字符串全排列 【...

  • 文章收藏

    iOS面试题系列之常见算法 排序算法整理 字符串【3】最长回文子串【3】最长无重复子串【1*】字符串转数字【4】K...

  • iOS最长回文子串算法(Swift)

    描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入:...

  • 经典算法问题:最长回文子串之 Manacher 算法

    title: 经典算法问题:最长回文子串之 Manacher 算法date: 2019-02-17 08:00:0...

  • 面经准备

    算法 1,最长回文子串https://www.cnblogs.com/mini-coconut/p/9074315...

网友评论

    本文标题:Swift刷算法:最长的回文子串

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