• 回文字符串


    判断字符串是否是回文字符串

    function isPalindrome($subs){
            $len = strlen($subs);
            for($i=0; $i<(int)($len/2); $i++){
                if($subs{$i} != $subs{$len-$i-1}){
                    return false;
                }
            }
            return true;
        }
    

      

    $subs{$i}字符串开始值,
    $subs{$len-$i-1}字符串末值
    如:‘123321’,‘1234321’,这都是回文字符串

    获取最长回文字符串
    暴力揭发:
    function longestPalindrome($s) {
            $len = strlen($s);
            $tmps = '';
            $max = 0;
            for($i=0 ; $i<$len; $i++){ //起始下标
                for($j=$i+1; $j<=$len;$j++){ //长度
                    if(isPalindrome(substr($s,$i,$j)) && $j > $max){
                        $tmps = substr($s,$i,$j);
                        $max = $j;
                    }
                }
            }
            return $tmps;
        }
    
        function isPalindrome($subs){
            $len = strlen($subs);
            for($i=0; $i<(int)($len/2); $i++){
                if($subs[$i] != $subs[$len-$i-1]){
                    return false;
                }
            }
            return true;
        }
    

      

    中心扩展法
    把每个字母当成回文串的中心。考虑两种情况,长度为奇数和偶数
    
    function longestPalindrome($s) {
            $n = strlen($s);
            if($n == ''){
                return $s;
            }
            $start = 0;
            $maxlen = 0;
    
            for($i=0; $i<$n; $i++){
                $len1 = isPalindrome($s,$i,$i);//奇数
                $len2 = isPalindrome($s,$i,$i+1);//偶数
                $len = max($len1,$len2);
                if($len > $maxlen){
                    $start = $i - ($len-1)/2;
                    $maxlen = $len;
                }
            }
            return substr($s,$start,$len) ;
        }
    
        function expend($str,$i,$j){
            $n = strlen($str);
            $l = $i;
            $r = $j;
    
            while($l>=0 && $r<$n && $str[$l] == $str[$r]){
                $l-- ;
                $r++ ;
            }
    
            return $r-$l-1;
    
        }
    

      

    马拉车算法
     function longestPalindrome($s) {
            $T = $this->malache($s);
            $n = strlen($T);
            $C = $R = 0;
            $p = [];
            for($i=1; $i<$n-1; $i++){
                $i_mirror = $C*2 - $i;
                if($R>$i){
                    $p[$i] = min($R-$i,$p[$i_mirror]);
                }else{
                    $p[$i] = 0;
                }
                while(($T[$i-1-$p[$i]]) == ($T[$i+1+$p[$i]]) ){
                    $p[$i]++;
                }
                if($i + $p[$i] > $R) {
                    $C = $i;
                    $R = $i + $p[$i];
                }
            }
            $maxLen = 0;
            $centerIndex = 0;
            for ($i=1; $i<$n-1;$i++ ){
                if($p[$i] > $maxLen){
                    $maxLen = $p[$i];
                    $centerIndex = $i;
                }
            }
    
            $start = ($centerIndex-$maxLen)/2;
            echo substr($s,$start,$maxLen);
        }
    
        function malache($str){
            $n = strlen($str);
            if(!$str){
                return "^$";
            }
            $ret = '^';
    
            for($i=0; $i<$n; $i++){
                $ret .= '#'.$str[$i];
            }
            $ret .= "#$";
    
            return $ret;
    
        }
    

      

    踩过这个坑,还有下一个坑等着你,这一路就是给自己填坑,坑填多了,也就习惯了,直到这一路平坦了,也就无怨无悔了。
  • 相关阅读:
    TP5学习笔记- 使用命令行创建控制器
    centos 7 下安装mysql5.7
    webserver的安装
    linux常用命令 服务器硬件资源信息
    SSH 安装/ config 配置以及免密码登录
    thinkphp ,laravel,yii2运行环境搭建.
    分享几个博客园代码样式的CSS配置(复制黏贴即可)
    vue中通过.sync修饰符实现子组件修改父组件数据
    vue中$attrs和$listeners以及inheritAttrs的用法
    Vue项目中实现用户登录及token验证
  • 原文地址:https://www.cnblogs.com/xiaofeilin/p/15063730.html
Copyright © 2020-2023  润新知