• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

最长回文子串

/*
请解释代码的思想以及关键代码的作用,谢谢。
*/
public String longestPalindrome(String s) {
                int start = 0, end = 0;
            for (int i = 0; i < s.length(); i++) {
                int len1 = expandAroundCenter(s, i, i);
                int len2 = expandAroundCenter(s, i, i + 1);
                int len = Math.max(len1, len2);
                if (len > end - start) {
                    start = i - (len - 1) / 2;
                    end = i + len / 2;
                }
            }
            return s.substring(start, end + 1);
             
        }
        public int expandAroundCenter(String s, int left, int right) {
            int L = left, R = right;
            while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
                L--;
                R++;
            }
            return R - L - 1;
        }

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

//大晚上闲的无聊,我就帮忙看了一下,全当复习下数据结构
//首先,这个算法找最长回文字串使用的是穷举所有的中心点来找出长度最大的字符串
//而构成回文无非就两种形式,奇数字符串和偶数字符串
//我就在里面给你做注释了,解释下这个方法的意思
public String longestPalindrome(String s) {
int start = 0, end = 0;
  //先解释下循环的意思,每个点都要是尝试一次,就是回文的中心点啦
for (int i = 0; i < s.length(); i++) {
//长度为奇数的回文字符串的中心,最开始是 i=0,即长度是1,肯定是中心点

//举个例子:奇数回文121 中心点可以是1.也可以是2,此时回文长度就是3了
   int len1 = expandAroundCenter(s, i, i);//这个方法的作用就是返回回文字符串的长度
//长度为偶数时的回文字符串的中心,和奇数理解一样的,比如说22就是回文,长度为2

   int len2 = expandAroundCenter(s, i, i + 1);
//这里就不用解释了吧,从两类字符串选择最长的作为最长子回文字符串

   int len = Math.max(len1, len2);
//这里的判断是比较这一次找到的最长子回文的长度是不是比上一次的长度大,不是的话就不用换喽

   if (len > end - start) {
     start = i - (len - 1) / 2;//最长子序列的起始位置
     end = i + len / 2;//结束位置
   }
}
return s.substring(start, end + 1);//呃,这个就是字符串截取嘛
  
}
public int expandAroundCenter(String s, int left, int right) {
int L = left, R = right; //其实这里的left,right就是中心点的坐标嘛,坐标可以是一个,也可以是两个
//循环来得到从中心点开始的最长子回文
while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
   L--;
   R++;
}
//这个就是长度嘛,什么,你问为什么减一,好吧,我告诉你
//最后一次循环是长度是多加了2,这个知道吧L--,R++
//实际上公式应该是这样 R -L -2+1; //+1你应该知道吧 123的长度为3-1+1   ==!
return R - L - 1;
}

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!