用 PHP 来刷leetCode 之 最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"

方法一:暴力法

应该是第一眼就想出来的方法了 逻辑也符合一般思想(最简单- -)

function isPalindrome($str)
{
    if ($str === strrev($str)) {
        return 1;
    } else {
        return 0;
    }
}
function getAllSubstring($str)
{
    $all_str_arr = [];
    for ($i = 0; $i < strlen($str); $i++) {
        for ($j = 0; $j < strlen($str) - $i + 1; $j++) {
            if (strlen(substr($str, $i, $j)) > 1) {
                $all_str_arr[] = substr($str, $i, $j);
            }
        }
    }
    return $all_str_arr;
}
function getArrMaxStr($arr)
{
    $max = 0;
    foreach ($arr as $k => $v) {
        if (strlen($arr[$max]) < strlen($v)) {
            $max = $k;
        }
    }
    return $arr[$max];
}
function getMaxPalindrome1($str)
{
    if (isPalindrome($str)) {
        return $str;
    } else {
        // 拆分成多个字符串,然后循环比较
        foreach (getAllSubstring($str) as $k => $v) {
            if (isPalindrome($v)) {
                $max_str[] = $v;
            }
        }
        return getArrMaxStr($max_str);
    }
}

echo getMaxPalindrome1('aoifbnruhgohajfkasdjfjdfurivb');

显然这种方法的时间复杂度是O(n^3)

优化:在获取所有子串的方法中直接判断 返回的是全部回文子串的数组  时间复杂度优化到O(n^2)

方法二:

你可能感兴趣的:(PHP,算法)