5. 最长回文子串
难度中等3421收藏分享切换为英文接收动态反馈
给你一个字符串 s
,找到 s
中最长的回文子串。
示例 1:
1 | 输入:s = "babad" |
示例 2:
1 | 输入:s = "cbbd" |
示例 3:
1 | 输入:s = "a" |
示例 4:
1 | 输入:s = "ac" |
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母(大写和/或小写)组成
动态规划只记录长度
1 | import java.util.*; |
动态规划
1 | class Solution { |
枚举回文中心
回文中心有两种情况,分别是有奇数个字符的回文字符串的回文中心和有偶数个字符的回文中心
有奇数个字符的字符串的回文判断第一步需要判断s.charAt(i)==s.charAt(i)
有偶数个字符的字符串的回文判断第一步需要判断s.charAt(i)==s.charAt(i+1)
因此每枚举一个index的时候需要进行两次判断
1 | class Solution { |
动态规划
外层枚举每个字符串的长度
内层枚举字符串中的每个字符
标记以每个字符为中心的满足回文串的字符,自回文中心向外扩充回文串的长度,并记录其中的最大子字符串
1 | class Solution { |
枚举回文中心
回文中心有两种情况,分别是有奇数个字符的回文字符串的回文中心和有偶数个字符的回文中心
有奇数个字符的字符串的回文判断第一步需要判断s.charAt(i)==s.charAt(i)
有偶数个字符的字符串的回文判断第一步需要判断s.charAt(i)==s.charAt(i+1)
因此每枚举一个index的时候需要进行两次判断
1 |
|
manacher算法
1 |
|