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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sql在线练习网站(http://sqlzoo.cn)答案解析(1)

    sql在线练习网站(http://sqlzoo.cn)答案解析(1)一:SELECT(http://www.sqlzoo.cn/1.htm)1a.查看关于bbc表的详细说明SELECTname,region,populationFROMbbc2a.

    2022年8月4日
    23
  • 一个普通Android程序员的2018总结2019计划

    一个普通Android程序员的2018总结2019计划承接去年总结:一个普通Android程序员的20182018:总结这一年继续分三个方面吧:职场篇:这一年发生了很多事,上家公司团队经营问题,最终结果是团队解散,期间发生一系列事情,参照一个普通一个Android程序员的心酸历程(2018.5.1)。然后修整两个月,找到了现在这家公司,公司目前规模不大,但各方面管理和上家公司天壤之别,至少目前我工作过的公司里面,算是最好的了,工资不是很高,…

    2022年6月14日
    40
  • 【shell案例】学员管理系统「建议收藏」

    【shell案例】学员管理系统「建议收藏」前言学员管理系统涉及到学员的增删改查,这是一个综合性比较强的项目,在所有的编程语言里都会有不同版本的学员信息管理系统,难度适中效果截图学员管理系统源码#!/bin/bash##随机点名册whiletruedo echo”学生随机点名系统” echo”1.添加学员名单” echo”2.遍历学员名单” echo”3.随机点名” echo”4.删除某个学员的信息” echo”5.退出” read-p”请输入你要选择的序号:”num case

    2022年9月21日
    4
  • 浅谈 MVC与三层架构

    浅谈 MVC与三层架构引言:使用Eclipse开发工具写JavaWeb项目时会发现,一个中型或者大型项目随着代码的增多,会发现:代码既可以写在src目录下,也可以写在WebContent目录下。src下可以建很多包,WebContent下可以建很多文件夹。所以问题就来了:一个新的类到底往哪个目录下的哪个文件夹里写?此时解决办法就是:需要一个模式去规范,到底哪个类该往哪里写。…

    2022年6月25日
    25
  • 第二届全国大学生网络安全精英赛初赛错题笔记

    第二届全国大学生网络安全精英赛初赛错题笔记(一)1.通信保密阶段主要威胁:搭线窃听和密码分析主要措施:数据加密保护机密性和完整性开始标志:香农的《保密系统的信息理论》2.信息安全的阶段四个阶段:通信安全、计算机安全、信息安全、信息保障3.信息系统安全保障蕴含:生命周期、保障要素、安全特征4.完整性:确保信息在存储、使用、传输的过程中不会被非授权按用户篡改,同时还要防止授权用户对信息进行不恰当篡改,保持信息内外部表示的一致性国际标准化组织:IOS/OSI提供了五种安全服务:以及八类安全机制。五类安全服务:认证(鉴别)服

    2022年5月25日
    57
  • RCNN和SPPnet

    RCNN和SPPnetRCNN的提出首次利用了CNN来提取图片特征,大大提高了检测精度。整体思路:输入一张图片,selectivesearch方法提取2000个proposalregion,由于CNN输入图片的大小是固定的,所以需要把proposalregion变成同样的大小(比如227×227),然后通过五层卷积层和两个全连接层,然后用SVM进行分类因为我们后面还要继续用这2000个候选框图片,继续…

    2022年6月10日
    38

发表回复

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

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