使用kotlin解决这个问题:5. 最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 提示: 1 <= s.length <= 1000 s 仅由数字和英文字母组成 通过次数1,423,178提交次数3,788,676
时间: 2024-02-13 11:00:36 浏览: 80
这个问题可以使用中心扩展法来解决。中心扩展法的思路是枚举回文中心,然后从中心向两边扩展,直到无法扩展为止。
具体实现:
1. 遍历字符串 s,以每个字符为中心向两边扩展,记录扩展的左右边界。
2. 注意考虑回文串长度为奇数和偶数两种情况。
3. 在遍历过程中记录最长回文子串的起始位置和长度。
下面是 Kotlin 代码实现:
```kotlin
fun longestPalindrome(s: String): String {
var start = 0
var end = 0
for (i in s.indices) {
val len1 = expandAroundCenter(s, i, i)
val len2 = expandAroundCenter(s, i, i + 1)
val len = maxOf(len1, len2)
if (len > end - start) {
start = i - (len - 1) / 2
end = i + len / 2
}
}
return s.substring(start, end + 1)
}
private fun expandAroundCenter(s: String, left: Int, right: Int): Int {
var l = left
var r = right
while (l >= 0 && r < s.length && s[l] == s[r]) {
l--
r++
}
return r - l - 1
}
```
时间复杂度为 O(n^2),空间复杂度为 O(1)。
阅读全文