中等swift
给定一个字符串 s,找到 s 中最长的回文子串。你能够假设 s 的最大长度为 1000。bash
1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
复制代码
2:
输入: "cbbd"
输出: "bb"
复制代码
来源:力扣(LeetCode) 连接:leetcode-cn.com/problems/lo… 著做权归领扣网络全部。商业转载请联系官方受权,非商业转载请注明出处。网络
swiftapp
该题求回文字符串,难点在形如aba
和aa
都算回文字符串。因此我打算在每一个字符串的中间和字符串收尾加一个占位符#
,这样等于强制将可比较的字符串变成了奇数长度。而后我去遍历字符串,分别取每一个字符的正负可偏移量offset
,对每一个字符的正负方向上去找是否有知足的回文字符串。优化
代码以下:ui
class Solution {
func longestPalindrome(_ s: String) -> String {
if s.count == 0 || s == "" {
return ""
}
var longestString = ""
let stringArray = Array(s)
var insertArray = Array<Character>()
for index in 0...stringArray.count * 2 {
if index % 2 == 0 {
insertArray.append(Character("#"))
} else {
insertArray.append(stringArray[(index - 1) / 2])
}
}
let arrayLength = insertArray.count
for index in 1...insertArray.count - 2 {
let value = insertArray[index]
let maxOffset = index <= arrayLength - 1 - index ? index : arrayLength - 1 - index
var tempString = String(value)
if tempString == "#" {
tempString = ""
}
for offset in 1...maxOffset {
let offsetLeftValue = insertArray[index - offset]
let offsetRightValue = insertArray[index + offset]
if offsetLeftValue != offsetRightValue {
break
} else {
if offsetLeftValue != "#" {
tempString = String(offsetLeftValue) + tempString + String(offsetRightValue)
}
}
}
if longestString.count < tempString.count {
longestString = tempString
}
}
return longestString
}
}
复制代码
这是一道动态规划题,但我并无按常理解答,还有待优化的地方。spa