public static String longestPalindrome(String s) {
		int n = s.length();
		boolean[][] p = new boolean[1000][1000];
		int longestBegin = 0;
		int maxLen = 1;
		for (int i = 0; i < n; i++) {
			p[i][i] = true;
		}
		for (int i = 0; i < n - 1; i++) {
			if (s.charAt(i) == s.charAt(i + 1)) {
				p[i][i + 1] = true;
				longestBegin = i;
				maxLen = 2;
			}
		}
		for (int len = 3; len <= n; len++) {
			for (int i = 0; i < n - len + 1; i++) {
				int j = i + len - 1;
				if (s.charAt(i) == s.charAt(j) && p[i + 1][j - 1]) {
					p[i][j] = true;
					longestBegin = i;
					maxLen = len;
				}
			}
		}

		return s.substring(longestBegin, longestBegin + maxLen);
	}