leetcode 的T5 最长回文字符串

发布于:2025-03-25 ⋅ 阅读:(26) ⋅ 点赞:(0)

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


网站公告

今日签到

点亮在社区的每一天
去签到