当前位置: 首页 > news >正文

java最大回文字符串长度_Leet Code 5 最长回文子串 - Java

给定字符串S,求它的最长回文子串。你可以假设S的最大长度为1000,并且仅有唯一的最长回文子串。

第一种方法:

从左到右扫描字符串S,对每个字符查找后面与该字符相同的字符,判断以这两个相同字符为首尾的字符串是否是回文,如果是到目前为止发现的最长回文子串,则记录该子串的起始结束位置。

Leet Code测试耗时 101ms。性能太差,还需优化。

public class Solution {

public static String longestPalindrome(String s) {

if (s == null || s.length() <= 1) {

return s;

}

int longestStart = 0;

int longestEnd = 0;

for (int i = 0; i < s.length() - 1; i++) {

int end = -1;

while ((end = s.indexOf(s.charAt(i),

Math.max(longestEnd + 1, Math.max(i + 1, end + 1)))) != -1) {

if (end - i > longestEnd - longestStart) {

if (isPalindrome(s, i, end)) {

longestStart = i;

longestEnd = end;

}

}

}

if (longestEnd == s.length() - 1) {

break;

}

}

return s.substring(longestStart, longestEnd + 1);

}

private static boolean isPalindrome(String s, int start, int end) {

for (int i = start; i < (start + end + 1) / 2; i++) {

if (s.charAt(i) != s.charAt(end + start - i)) {

return false;

}

}

return true;

}

}

第二种方法:中心扩展法

从左往右扫描字符串S,以每个字符为中心,向两边扩展构造回文子串,记录最长回文子串的起始结束位置。

Leet Code 测试耗时 49ms。

public class Solution {

public static String longestPalindrome(String s) {

if (s == null || s.length() <= 1) {

return s;

}

int longestStart = 0;

int longestEnd = 0;

int start = 0;

int end = 0;

for (int i = 0; i < s.length(); i++) {

// 回文长度为奇数

for (int j = 0; (i - j >= 0) && (i + j) < s.length(); j++) {

if (s.charAt(i - j) != s.charAt(i + j)) {

break;

}

start = i - j;

end = i + j;

}

if (end - start > longestEnd - longestStart) {

longestEnd = end;

longestStart = start;

}

// 回文长度为偶数

for (int j = 0; (i - j) >= 0 && (i + j + 1) < s.length(); j++) {

if (s.charAt(i - j) != s.charAt(i + j + 1)) {

break;

}

start = i - j;

end = i + j + 1;

}

if (end - start > longestEnd - longestStart) {

longestEnd = end;

longestStart = start;

}

}

return s.substring(longestStart, longestEnd + 1);

}

}

相关文章:

  • java泡沫_Java初认识--函数和数组
  • java虚拟机内存溢出的三个原因_JVM发生内存溢出的原因分析及解决方案
  • mysql更新多个字段php_PHP:如果语句无意中导致多个MySQL列更新?
  • properties java jar_propertiesutil jar包
  • python段落注释的语法格式是_Python 基础语法
  • python读取xml配置_python解析xml配置文件
  • java 接口数据类型_Java中的基本数据类型与引用数据类型
  • java 红包接口开发_java调用微信现金红包接口的心得与体会总结
  • java项目中学到了什么_我们能从Java的HelloWorld中学到什么?
  • js java md5加密_MD5加密 (java、js)
  • junit mysql_使用Junit单元测试及操作MySQL数据库时出现错误及解决方法
  • java最简单的算术程序_java – ANTLR4访问者模式简单的算术示例
  • java版我的世界有溺尸_我的世界溺尸怎么找
  • mysql制作html静态网页6_PHP生成HTML静态页面实例代码
  • Thread核心java语句_【经典干货】《Java 多线程编程核心技术》学习笔记及总结(中)...
  • __proto__ 和 prototype的关系
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • CSS 三角实现
  • express.js的介绍及使用
  • fetch 从初识到应用
  • gops —— Go 程序诊断分析工具
  • Gradle 5.0 正式版发布
  • HTML中设置input等文本框为不可操作
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Python连接Oracle
  • Swoft 源码剖析 - 代码自动更新机制
  • 闭包,sync使用细节
  • 简析gRPC client 连接管理
  • 坑!为什么View.startAnimation不起作用?
  • 如何胜任知名企业的商业数据分析师?
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • mysql面试题分组并合并列
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • (39)STM32——FLASH闪存
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (rabbitmq的高级特性)消息可靠性
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)换源+apt-get基础配置+搜狗拼音
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .gitignore文件—git忽略文件
  • .md即markdown文件的基本常用编写语法
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core WebAPI中封装Swagger配置
  • .Net Core 中间件验签
  • .NET MVC 验证码
  • .net Stream篇(六)
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)