[力扣]5.最长回文子串中等

tech2022-08-05  129

描述:

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例:

示例 1:

输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd" 输出: "bb"

我的解决方案:

class Solution { public String longestPalindrome(String s) { if(s==null||s.length()==1){ return s; } String res = ""; for(int i=0;i<s.length();i++){ String tempS1 = huiwen(s,i,i); String tempS2 = huiwen(s,i,i+1); res = (res.length()>tempS1.length())?res:tempS1; res = (res.length()>tempS2.length())?res:tempS2; } return res; } public String huiwen(String s,int left,int right){ while(left>=0&&right<s.length()){ if(s.charAt(left)==s.charAt(right)){ left--; right++; }else{ break; } } return s.substring(left+1,right); } }

思路解析:

菜鸟今天咸鱼翻身了,一次调试就通过了(一年前做过这道题),所以不想说什么较优的解决方案,就说我的解决方案(其实还是在一年前参考了别人的思路),嘿嘿嘿。

首先要明确回文字符串的格式有两种,一种aba格式,一种是abba格式(空串特殊处理,一个字符的其实也是aba格式,为了方便可以一起放到特殊处理中)。然后在知道了两种格式的基础上,明确如何去找出回文字符串,方法是以某个或某两个字符为中心,向两边扩散比较,相同的话,回文子串扩大,不相同则扩展结束,得到当前的子串。所以按照这个思路对整个字符串的字符进行构造,最终保存最长的子串。

 

最新回复(0)