博客
关于我
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/

你可能感兴趣的文章
面向对象之异常处理:多路捕获
查看>>
Python简易五子棋
查看>>
MySQL8.0.19 JDBC下载与使用
查看>>
Windows安装MongoDB 4.2.8
查看>>
Vue新建项目——页面初始化
查看>>
Cent OS 7.6 服务器软件安装(这篇博客主要是为了方便我配置云主机的)
查看>>
MySQL使用系列文章
查看>>
Node.js包使用系列(一)——修改NPM全局下载和缓存路径
查看>>
TDengine使用(一)——TDengine下载与安装
查看>>
Node.js包使用系列(三)——常用npm包列表
查看>>
ubuntu和windows之间无法复制粘贴
查看>>
编译Linux内核--制作文件系统--远程调试程序
查看>>
启动加载器BootLoader
查看>>
剑指 Offer 28. 对称的二叉树
查看>>
力扣239. 滑动窗口最大值
查看>>
epoll+threadpool高并发网络IO模型的实现
查看>>
css3中的动画属性
查看>>
css中去除input里蓝色的边框线
查看>>
用JavaScript 和 html 写一个简易的计算器(直接用)
查看>>