美文网首页PHP经验分享编什么程
LeetCode面试题目——PHP实现最短回文串

LeetCode面试题目——PHP实现最短回文串

作者: 沙蒿同学 | 来源:发表于2020-01-20 16:51 被阅读0次

    题目

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。

    示例 1:

    输入: "aacecaaa"
    输出: "aaacecaaa"
    

    示例 2:

    输入: "abcd"
    输出: "dcbabcd"
    

    简单说明

    我们先写个判断字符串是否为回文的函数,然后从右往左一点点往里面填,拼接到旧的字符串上,判断是不是回文串,如果是的话,直接返回即可

    代码

    class Solution {
    
        /**
         * Created by 沙蒿.
         * @desc 生成回文字符串
         * @param $s
         * @return string
         */
        function shortest_palindrome($s)
        {
            $temp = '';
            $len  = strlen($s);
            if ($len > 1) {
                if (!$this->is_palindrome($s)) {
                    for ($i = 0; $i < $len - 1; $i++) {
                        //每一次从尾部依次取一个下标字符串到前面
                        $temp = $temp . $s[$len - 1 - $i];
                        if ($this->is_palindrome($temp . $s)) {
                            return $temp . $s;
                        }
                    }
                }
            }
            return $s;
        }
    
        /**
         * Created by 沙蒿.
         * @desc 判断是否为回文字符串
         * @param $string
         * @return bool
         */
        function is_palindrome($string)
        {
            $len    = strlen($string);
            $is_odd = ($len % 2 == 0) ? 0 : 1;
            $midd   = $len / 2;
            //从0位置开始,截取字符串前几位数字
            $f_string = substr($string, 0, $midd);
            //从上一个截取的结束位置起(奇数 + 1),截取字符串后几位数字,并反转字符串
            $b_string = strrev(substr($string, $midd + $is_odd, $midd));
            if ($f_string != $b_string) {
                return false;
            }
            return true;
        }
    }
    

    结果

    提交结果:提交通过

    通过测试用例:120/120

    语言:php

    执行用时:632 ms

    消耗内存:15.3 MB

    相关文章

      网友评论

        本文标题:LeetCode面试题目——PHP实现最短回文串

        本文链接:https://www.haomeiwen.com/subject/scgjzctx.html