最近找实习刷题中,遇到好多问题,有coding2小时还报错的无奈,也有战胜100%的孤独,谨在此记录一二,与君共勉。
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000(来自leetCode第5题)。
public class Solution { public static String longestPalindrome(String s) { //开辟数组存放最长回文串start和end索引 int[] sIndex = { 1000, -1 }; //开辟数组存放所有字串回文状态 boolean[][] dp = new boolean[s.length()][s.length()]; //遍历所有字串 for (int i = 0; i < s.length(); i++) { for (int j = s.length() - 1; j >= i; j--) { //是否已存回文,如有,说明存在比当前串长的回文串,跳出本次循环 if (dp[i][j] == true) { continue; } //判断回文 dp[i][j] = isABA(s, i, j); //不回文,跳出本次 if (dp[i][j] != true) { continue; } //回文,存入状态(包括特殊子串) while (i > dp[0].length - 1 && j < 0 && i <= j) { dp[i++][j--] = true; } //是否大于记录值。。。 if ((j - i) > (sIndex[1] - sIndex[0])) { sIndex[0] = i; sIndex[1] = j; } } } return s.substring(sIndex[0], sIndex[1] + 1); } //判断是否回文 private static boolean isABA(String s, int p1, int p2) { while (p1 < p2) { if (s.charAt(p1++) != s.charAt(p2--)) { return false; } } return true; } }
leetcode OJ:
用了一秒钟[允悲],恳请各位指正。
除特别标注引用外,以上均来自原创,如有侵权,请联系本人删除。