Skip to content

Commit 7702738

Browse files
committed
add: LongestPalindromeInAStringExpanding
1 parent 20a7ada commit 7702738

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
public class LongestPalindromeInAStringExpanding {
2+
public String longestPalindromeInAStringExpanding(String s) {
3+
int n = s.length();
4+
int start, maxLen;
5+
start = maxLen = 0;
6+
for (int center = 0; center < n; center++) {
7+
// Check for odd-length palindromes.
8+
int oddStart, oddLength;
9+
int[] oddResult = expandPalindrome(center, center, s);
10+
oddStart = oddResult[0];
11+
oddLength = oddResult[1];
12+
if (oddLength > maxLen) {
13+
start = oddStart;
14+
maxLen = oddLength;
15+
}
16+
// Check for even-length palindromes.
17+
if (center < n - 1 && s.charAt(center) == s.charAt(center + 1)) {
18+
int evenStart, evenLength;
19+
int[] evenResult = expandPalindrome(center, center + 1, s);
20+
evenStart = evenResult[0];
21+
evenLength = evenResult[1];
22+
if (evenLength > maxLen) {
23+
start = evenStart;
24+
maxLen = evenLength;
25+
}
26+
}
27+
}
28+
return s.substring(start, start + maxLen);
29+
}
30+
31+
// Expands outward from the center of a base case to identify the start
32+
// index and length of the longest palindrome that extends from this
33+
// base case.
34+
private int[] expandPalindrome(int left, int right, String s) {
35+
while (left > 0 && right < s.length() - 1 && s.charAt(left - 1) == s.charAt(right + 1)) {
36+
left--;
37+
right++;
38+
}
39+
return new int[]{left, right - left + 1};
40+
}
41+
}

0 commit comments

Comments
 (0)