最长回文子串问题

最近找实习刷题中,遇到好多问题,有coding2小时还报错的无奈,也有战胜100%的孤独,谨在此记录一二,与君共勉。

给定一个字符串 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:


用了一秒钟[允悲],恳请各位指正。

除特别标注引用外,以上均来自原创,如有侵权,请联系本人删除。

猜你喜欢

转载自blog.csdn.net/windddy/article/details/80219232