给你一个字符串 s,找到 s 中最长的回文子串。

    示例 1:
    输入:s = “babad”
    输出:”bab”
    解释:”aba” 同样是符合题意的答案。

    示例 2:
    输入:s = “cbbd”
    输出:”bb”

    示例 3:
    输入:s = “a”
    输出:”a”

    示例 4:
    输入:s = “ac”
    输出:”a”

    思路:动态规划,第i-j 是否回文,回文的判断标准是

    1. <?php
    2. class Solution {
    3. /**
    4. * @param String $str
    5. * @return String
    6. */
    7. function longestPalindrome($str) {
    8. $len = strlen($str);
    9. if ($len < 2){
    10. return $str;
    11. }
    12. $dp = [];
    13. // 第i-i 肯定是回文的
    14. for ($i = 0; $i<$len; $i++){
    15. $dp[$i][$i] = true;
    16. }
    17. $maxLen = 1;
    18. $start = 0;
    19. for ($j = 1;$j < $len ; $j++){
    20. for ($i = 0 ; $i < $j ; $i++){
    21. $left = substr($str,$i,1);
    22. $right = substr($str,$j,1);
    23. $dp[$i][$j] = ($left == $right) && (($j - $i) < 3 || $dp[$i + 1][$j - 1]);
    24. if (!empty($dp[$i][$j])){
    25. $currentMaxLen = $j-$i+1;
    26. if ($currentMaxLen > $maxLen){
    27. $maxLen = $currentMaxLen;
    28. $start = $i;
    29. }
    30. }
    31. }
    32. }
    33. return substr($str,$start,$maxLen);
    34. }
    35. }

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-palindromic-substring
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。