最长回文串 - 算法
思路:首先定义二维布尔类型的数组,然后初始化i == j 时候的值为true
从长度L为2开始到len,然后i从0到len,j从L + i - 1
i代表字符开始的位置,j代表字符结束的位置
如果s.i== s.j,此时如果L大于3的话,i和j的布尔值依赖于i + 1 和j - 1,如果L小于的话,则直接置为true,(说明此时的字符长度不长,小于3),
如果不相等的话,将dpij直接置为false
利用start保存i的值,maxLen保存L的值,如果maxLen< L时,需要将maxLen值更新,要判断一下j时候存在地址越界情况。
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param A string字符串 * @return int整型 */ public int getLongestPalindrome (String A) { // write code here int len = A.length(); boolean[][] dp = new boolean[A.length()][A.length()]; for (int i = 0; i < A.length(); i++) { dp[i][i] = true; } int start = 0, maxLen= 1; for (int L = 2; L <= len; L++) { for (int i = 0; i < len; i++) { int j = i + L - 1; if (j >= len) { break; } if (A.charAt(i) == A.charAt(j)) { if (L - 1 >= 3) { dp[i][j] = dp[i + 1][j - 1]; } else { dp[i][j] = true; } } else { dp[i][j] = false; } if (dp[i][j] && L > maxLen) { start = i; maxLen = L; } } } return amx; } }

浙公网安备 33010602011771号