题目
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
解决思路
使用动态规划解决问题,动态规划把大问题转换成小问题,把大块转换成小块
具体思路参考
解决方法
fun longestPalindrome(s: String): String {
var start = 0
var end = 1
val size = s.length
val charArray = s.toCharArray()
val dpArray = Array(size) {
BooleanArray(size) { false }
}
for (i in 0 until size) {
dpArray[i][i] = true
}
//i 表示字串的长度
for (length in 2..size) {
//j 表示字串的起始位置
for (startIndex in 0 until size) {
val endIndex = startIndex + length - 1
if (endIndex >= size) {
break
}
//长度是2
if (length == 2) {
if (startIndex + 1 < size) {
dpArray[startIndex][endIndex] = charArray[startIndex] == charArray[startIndex + 1]
}
} else {
//长度是3以上
if (endIndex < size) {
dpArray[startIndex][endIndex] =
dpArray[startIndex + 1][startIndex + length - 2] && charArray[startIndex] == charArray[endIndex]
}
}
if (dpArray[startIndex][endIndex] && length > end - start) {
start = startIndex
end = startIndex + length
}
}
}
return s.substring(start, end)
}
总结
1.再困难的问题,经历过都能学会。
不要怕,天资聪颖是少数人的权力
后天学习也可以有不凡的成就
2.人对于不懂不会的东西,往往都有恐惧心理
但是告诉自己不要怕
没有比腿更长的路
没有比人更高的山
只要肯攀登