php 最长回文子串

php 最长回文子串最长回文子串由于case包含奇偶性,所以分两种情况讨论思路:找到以字符”x”为中心的最长回文子串从x的下标开始遍历,拆分为偶数对称情况和奇数对称情况 终止条件有2: 对称位置的字符不相同 循环右侧下标超出字符长度 结果:1364ms14.9MB主要难点是:计算下标代码:classSolution{/***@paramStr…

大家好,又见面了,我是你们的朋友全栈君。

最长回文子串

由于case包含奇偶性,所以分两种情况讨论

思路:找到以字符”x”为中心的最长回文子串

  1. 从x的下标开始遍历,拆分为偶数对称情况和奇数对称情况
  2. 终止条件有2:
    1. 对称位置的字符不相同
    2. 循环右侧下标超出字符长度

结果:1364 ms 14.9 MB

主要难点是:计算下标

代码:

class Solution
{

    /**
     * @param String $s
     * @return String
     */
    function longestPalindrome($s)
    {

        $sArray = str_split($s, 1);
        $length1 = 1;
        $length2 = 1;
        $max = 1;
        $maxS = $sArray[0];
        $subS1 = $sArray[0];
        $subS2 = $sArray[0];
        $sLength = sizeof($sArray);

        for ($i = 0; $i < $sLength; $i++) {
            $bool1 = false;
            $bool2 = false;

            for ($j = $i; $j >= 0; $j--) {
                if ($sLength > 2) {
                    // 奇数情况
                    if ($sArray[$i - 1] == $sArray[$i + 1] && !$bool2 && (2 * $i - $j) <= $sLength - 1) {
                        $length2 = 2 * ($i - $j) + 1;
                        $subS2 = substr($s, $j, $length2);

                        if ($sArray[$j] != $sArray[2 * $i - $j]) {
                            $length2 = 2 * ($i - $j) - 1;
                            $subS2 = substr($s, $j + 1, $length2);
                            $bool2 = true;
                        }
                    }
                }

                // 偶数情况
                if ($sArray[$i] == $sArray[$i + 1] && !$bool1 && (2 * $i - $j + 1) <= $sLength - 1) {
                    $length1 = 2 * ($i - $j + 1);
                    $subS1 = substr($s, $j , $length1);

                    if ($sArray[$j] != $sArray[2 * $i - $j + 1]) {
                        $length1 = 2 * ($i - $j);
                        $subS1 = substr($s, $j + 1, $length1);
                        $bool1 = true;
                    }
                }

                if ($bool1 && $bool2) {
                    break;
                }
            }
            $length = $length1 > $length2 ? $length1 : $length2;
            $subS = $length1 > $length2 ? $subS1 : $subS2;
            if ($length > $max) {
                $maxS = $subS;
                $max = $length;
            }

            if (($sLength - $i - 1) * 2 <= $max) {
                break;
            }
        }
        return $maxS;
    }
}

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135660.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据库 分区表详解

    数据库 分区表详解如果你的数据库中某一个表中的数据满足以下几个条件,那么你就要考虑创建分区表了。1、数据库中某个表中的数据很多。很多是什么概念?一万条?两万条?还是十万条、一百万条?这个,我觉得是仁者见仁、智者见智的问题。当然数据表中的数据多到查询时明显感觉到数据很慢了,那么,你就可以考虑使用分区表了。如果非要我说一个数值的话,我认为是100万条。2、但是,数据多了并不是创建分区表的惟一条件,哪怕你有一千万条记录,但

    2022年6月6日
    40
  • 自动获取省份

    自动获取省份

    2021年9月11日
    63
  • 如何启用计算机的休眠,电脑休眠

    如何启用计算机的休眠,电脑休眠电脑休眠指的是将当前处于运行状态的数据保存在硬盘中,整机将完全停止供电。[1]在休眠时可以完全断开电脑的电源,自动关闭显示器和硬盘的时间设置为多长时间比较合适应看你需要了。中文名电脑休眠处于运行状态的数据保存在硬盘中存储在硬盘中进入休眠状态和唤醒的速度都相对较慢电脑休眠工作模式编辑语音为什么需要休眠尽管电脑硬件运行速度越来越快,但操作系统的体积也在不断膨胀,使得电脑开、关机…

    2022年7月12日
    13
  • python问题 Traceback (most recent call last)

    python问题 Traceback (most recent call last)python运行问题Traceback(mostrecentcalllast)出现报错traceback(mostrecentcalllast)…………importError:Nomodulenamedlxml解决方案一般是打开cmd执行命令pipinstallxxxx(缺失的包,例如lxml)当然也有例外的,具体可参考下面的问题及其解决…

    2022年6月3日
    618
  • 下拉框、下拉控件之Select2

    下拉框、下拉控件之Select2

    2021年11月9日
    80
  • pycharm缩进快捷方法「建议收藏」

    pycharm缩进快捷方法「建议收藏」整体缩进:鼠标拉选住代码块,按下tab键。反向缩进:鼠标拉选住代码块,按下shift+tab键

    2025年8月4日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号