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");
      }

    }

相关推荐
один but you12 分钟前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
是码龙不是码农39 分钟前
ThreadPoolExecutor 7 个核心参数详解
java·线程池·threadpool
这是程序猿1 小时前
Spring Boot自动配置详解
java·大数据·前端
MY_TEUCK1 小时前
【Java 后端 | Nacos 注册中心】微服务治理原理、选型与注册发现实战
java·开发语言·微服务
m0_629494732 小时前
LeetCode 热题 100-----26.环形链表 II
数据结构·算法·leetcode·链表
壹号用户2 小时前
用队列实现栈
数据结构·算法
做人求其滴2 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣
小江的记录本2 小时前
【Java基础】Java 8-21新特性:JDK21 LTS:虚拟线程、模式匹配switch、结构化并发、序列集合(附《思维导图》+《面试高频考点清单》)
java·数据库·python·mysql·spring·面试·maven
daad7772 小时前
记一组无人机IMU传感器数据
算法
计算机安禾2 小时前
【c++面向对象编程】第42篇:模板特化与偏特化:为特定类型定制实现
开发语言·c++·算法