给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
方法一:暴力循环
解题思路
1、从头开始遍历所有的点,寻找以它为中心的回文串
2、不断更新最大回文串
时间:16ms 空间:42MB
- class Solution {
- String result = "";//定义全局变量,存储结果
- public String longestPalindrome(String s) {
- //遍历所有的点,寻找以它为中心的回文串
- for(int i=0;i
- //当回文串是奇数时
- String s1 = find(s,i,i);
- //当回文串是偶数时
- String s2 = find(s,i,i+1);
- }
- return result;
- }
- public String find(String s ,int left , int right){
- while(left >= 0 && right < s.length()){
- if(s.charAt(left)==s.charAt(right)){
- //若符合条件,则从中心不断向外延伸
- left--;
- right++;
- }
- else{
- break;
- }
- }
- //substring方法,左闭右开
- String temp = s.substring(left+1,right);
- //更新最大的回文串
- return result = result.length()>temp.length() ? result : temp;
- }
- }
(还未学习,学完再来更新)
方法二:动态规划
方法三:马拉车算法