博客
关于我
LeetCode - 5. 最长回文子串——字符串、动态规划
阅读量:351 次
发布时间:2019-03-04

本文共 1918 字,大约阅读时间需要 6 分钟。

题目描述

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

示例 1:

输入:s = “babad”

输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:

输入:s = “cbbd”

输出:“bb”
示例 3:

输入:s = “a”

输出:“a”
示例 4:

输入:s = “ac”

输出:“a”

解题思路

暴力求解

class Solution_5 {       /**     * 暴力求解 时间复杂度太高     * @param s     * @return     */    public String longestPalindrome(String s) {           int n = s.length();        if (n < 2){               return s;        }        int maxLen = 1;        int begin = 0;        //s.charAt(i) 每次都会检查数组下标越界,因此可以先转换成字符数组        char[] chars = s.toCharArray();        for (int i = 0; i < n - 1; i++) {               for (int j = i + 1; j < n; j++) {                   if (j - i - 1 > maxLen && validPalindromic(chars,i,j)){                       maxLen = j - i + 1;                    begin = i;                }            }        }        return s.substring(begin,begin + maxLen);    }    /**     * 验证子串s[left.length] 是否为回文串     */    private boolean validPalindromic(char[] charArray,int left,int right){           while (left < right){               if (charArray[left] != charArray[right]){                   return false;            }            left++;            right--;        }        return true;    }}

动态规划

class Solution {       public String longestPalindrome(String s) {           int n = s.length();        boolean[][] dp = new boolean[n][n];        String ans = "";        for (int l = 0; l < n; ++l) {               for (int i = 0; i + l < n; ++i) {                   int j = i + l;                if (l == 0) {                       dp[i][j] = true;                } else if (l == 1) {                       dp[i][j] = (s.charAt(i) == s.charAt(j));                } else {                       dp[i][j] = (s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1]);                }                if (dp[i][j] && l + 1 > ans.length()) {                       ans = s.substring(i, i + l + 1);                }            }        }        return ans;    }}

转载地址:http://mier.baihongyu.com/

你可能感兴趣的文章
债券中的久期是什么意思
查看>>
(20200328已解决)从docker容器内复制文件到宿主机
查看>>
理解Docker ulimit参数
查看>>
理解Library of Congress Cataloging-in-Publication Data
查看>>
理解Python系统下的时间格式
查看>>
Python语言'类'概念再理解
查看>>
OpenAI Gym简介及初级实例
查看>>
Ubuntu 18.04 zip压缩文件及其文件 夹中的所以 内容
查看>>
int 转 CString
查看>>
Edit编辑框自动换行与长度
查看>>
低通滤波器的设计
查看>>
窄带随机过程的产生
查看>>
随机四则运算
查看>>
Java面向对象
查看>>
JAVA带标签的break和continue
查看>>
Java获取线程基本信息的方法
查看>>
Java集合Collection
查看>>
SpringBoot快速入门
查看>>
医疗管理系统-手机快速登录和SpringSecurity权限控制
查看>>
vue源码分析(MVVM篇)
查看>>