leetcode 的T5 最长回文字符串

示例 1:

复制代码
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

复制代码
输入:s = "cbbd"
输出:"bb"

提示:

  • 1 <= s.length <= 1000

  • s 仅由数字和英文字母组成

    package edu.contest;
    //T5 动态规划
    public class Solution4 {

    复制代码
      int arr[][] = new int[1000][1000];
      int max;
      String maxStr;
    
      public int calclong(String s, int i, int j) 
      {
      	if (arr[i][j] > 0)
      		return arr[i][j];
      	if (s.charAt(i) == s.charAt(j)) 
      	{
      		if (i == j - 1) 
      		{
      			arr[i][j] = 2;
      			if (arr[i][j] > max) 
      			{
      				max = Math.max(max, j - i + 1);
      				maxStr = (String) s.subSequence(i, j + 1);
      			}
      		}
      		if (i + 1 <= j - 1 && (calclong(s, i + 1, j - 1) != j - 1 - i)) // arr[i+1][j-1]
      		{
      			arr[i][j] = 0;
      		} else if (i + 1 <= j - 1 && calclong(s, i + 1, j - 1) == j - 1 - i) 
      		{
      			arr[i][j] = calclong(s, i + 1, j - 1) + 2;
      			// System.out.println("calclong"+" "+(i+1)+" "+(j-1)+"--->"+
      			if (arr[i][j] > max) 
      			{
      				max = Math.max(max, j - i + 1);
      				maxStr = (String) s.subSequence(i, j + 1);
      			}
      		}
      	} else
      		arr[i][j] = 0;
      	return arr[i][j];
      }
    
      public String longestPalindrome(String s) {
    
      	int max = 1;
      	// System.out.println(calclong(s,1,2));
      	
      	for (int i = 0; i < s.length(); i++)
      		arr[i][i] = 1;
      	maxStr = "" + s.charAt(0);
      	for (int i = 0; i < s.length(); i++)
      		for (int j = i + 1; j < s.length(); j++) {
      			arr[i][j] = calclong(s, i, j);
      		}
      	/*
      	 * for(int i=0;i<s.length();i++) { for(int j=0; j<s.length(); j++)
      	 * System.out.print(arr[i][j]+"\t"); System.out.println(); }
      	 * System.out.println(maxStr);
      	 */
      	return maxStr;
      }
    
      public static void main(String[] args) {
      	new Solution4().longestPalindrome("aaaa");
      }

    }

相关推荐
爱学习的阿磊1 小时前
模板代码跨编译器兼容
开发语言·c++·算法
毕设源码-钟学长2 小时前
【开题答辩全过程】以 基于协同过滤推荐算法的小说漫画网站设计与实现为例,包含答辩的问题和答案
算法·机器学习·推荐算法
u0109272712 小时前
代码覆盖率工具实战
开发语言·c++·算法
计算机毕设指导62 小时前
基于微信小程序的智能停车场管理系统【源码文末联系】
java·spring boot·微信小程序·小程序·tomcat·maven·intellij-idea
码云数智-大飞2 小时前
零拷贝 IPC:用内存映射文件打造 .NET 高性能进程间通信队列
java·开发语言·网络
懈尘2 小时前
深入理解Java的HashMap扩容机制
java·开发语言·数据结构
indexsunny2 小时前
互联网大厂Java面试实战:从Spring Boot到Kafka的技术与业务场景解析
java·spring boot·redis·面试·kafka·技术栈·microservices
roman_日积跬步-终至千里2 小时前
【Java并发】Tomcat 与 Spring:后端项目中的线程与资源管理
java·spring·tomcat
独自破碎E2 小时前
IDEA 提示“未配置SpringBoot配置注解处理器“的解决方案
java·spring boot·intellij-idea
yqd6662 小时前
RabbitMQ用法和面试题
java·开发语言·面试