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

    }

相关推荐
艾迪的技术之路4 分钟前
redisson使用lock导致死锁问题
java·后端·面试
今天背单词了吗98022 分钟前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
天天摸鱼的java工程师25 分钟前
使用 Spring Boot 整合高德地图实现路线规划功能
java·后端
手握风云-32 分钟前
优选算法的链脉之韵:链表专题
数据结构·算法·链表
Coding小公仔36 分钟前
LeetCode 151. 反转字符串中的单词
开发语言·c++·算法
稳兽龙36 分钟前
P1098 [NOIP 2007 提高组] 字符串的展开
c++·算法·模拟
东阳马生架构40 分钟前
订单初版—2.生单链路中的技术问题说明文档
java
G.E.N.41 分钟前
开源!RAG竞技场(2):标准RAG算法
大数据·人工智能·深度学习·神经网络·算法·llm·rag
写个博客1 小时前
暑假算法日记第三天
算法