中等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