当前位置: 首页 > Web前端 > JavaScript

Leetcode5最长回文子串

时间:2023-03-26 22:26:53 JavaScript

给你一个字符串s,找出s中最长的回文子串。示例1:输入:s="babad"输出:"bab"解释:"aba"也是符合题意的答案。例2:输入:s="cbbd"输出:"bb"例3:输入:s="a"输出:"a"例4:输入:s="ac"输出:"a"解题思路运用动态规划,状态转移方程如下:dp[i][j]=(s[i]==s[j])&&(i-j<3||dp[j+1][i-1])如果出现s[i]==s[j],如果i-j<3或者dp[j+1][i-1]也是回文,那么从j到i的字符串也是回文。i-j<3对应三种情况,第一种是三个字符,首末相同,不管中间是什么字符,都是回文串,第二种是两个字符,都一样,显然也是一个回文字符串,第三个只有一个字符,一个字符本身也是一个回文Java实现:classSolution{publicStringlongestPalindrome(Strings){if(s==null||s.length()==0)return;intlen=s.length();int开始=0;intmaxLen=1;布尔[][]dp=新布尔[len][len];for(inti=0;imaxLen){//记录最大长度并开始下标maxLen=i-j+1;开始=j;}}}}}//返回字符串returns.substring(start,start+maxLen);}}JS实际:functionlongestPalindrome(s){if(s==null||s.length==0)returns;让len=s.length;让开始=0;让maxLen=1;让dp=gen2DArray(len,len);for(leti=0;imaxLen){maxLen=i-j+1;开始=j;}}}}}returns.substring(start,start+maxLen)}functiongen2DArray(a,b){让res=[];for(leti=0;i