题目
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:”bab”
解释:”aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:”bb”
示例 3:
输入:s = “a”
输出:”a”
示例 4:
输入:s = “ac”
输出:”a”
题解
暴力破解法
1 | function isPalindrome(str) { |
- 时间复杂度O(n^3)
- 空间复杂度O(1)
中心扩散法
1.如果字符串长度小于2,直接返回原字符串
2.定义两个变量,一个start存储当前找到的最大回文字符串的起始位置,另一个maxLength记录字符串长度(终止位置就是start+maxLength)
3.创建一个helper function,判断左边和右边是否越界,同时最左边字符是否等于最右边字符。如果以上3个条件都满足,则判断是否需要更新回文字符串最大长度及最大字符串的起始位置,然后将left–,right++,继续判断,直到不满足三个条件之一。
4.遍历字符串,每个位置调用helper function两边,第一遍检查i-1,i+1,第二遍检查i,i+1.
1 |
|
动态规划
Author: Amanda-Zhang
Link: http://chunchunya.github.io/2021/03/03/3.03_%E6%9C%80%E9%95%BF%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.
