Skip to content

Commit c6fb6af

Browse files
committed
1 parent 2f94f90 commit c6fb6af

6 files changed

+231
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
class Solution {
2+
public String longestPalindrome(String s) {
3+
int len = s.length();
4+
5+
if (len <= 1) {
6+
return s;
7+
}
8+
9+
boolean[][] dp = new boolean[len][len];
10+
int start = 0;
11+
int maxLen = 1;
12+
13+
// All substrings of length 1 are palindromes.
14+
for (int i = 0; i < len; i++) {
15+
dp[i][i] = true;
16+
}
17+
18+
// Check for palindromes of length 2.
19+
for (int i = 0; i < len - 1; i++) {
20+
if (s.charAt(i) == s.charAt(i + 1)) {
21+
dp[i][i + 1] = true;
22+
start = i;
23+
maxLen = 2;
24+
}
25+
}
26+
27+
// Check for palindromes of length greater than 2.
28+
for (int k = 3; k <= len; k++) {
29+
for (int i = 0; i <= len - k; i++) {
30+
int j = i + k - 1;
31+
32+
if (dp[i + 1][j - 1] && s.charAt(i) == s.charAt(j)) {
33+
dp[i][j] = true;
34+
35+
if (k > maxLen) {
36+
start = i;
37+
maxLen = k;
38+
}
39+
}
40+
}
41+
}
42+
43+
return s.substring(start, start + maxLen);
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* @param {string} s
3+
* @return {string}
4+
*/
5+
var longestPalindrome = function (s) {
6+
const len = s.length;
7+
8+
if (len <= 1) {
9+
return s;
10+
}
11+
12+
let start = 0;
13+
let maxLen = 1;
14+
15+
const dp = new Array(len).fill(false).map(() => new Array(len).fill(false));
16+
17+
// All substrings of length 1 are palindromes.
18+
for (let i = 0; i < len; i++) {
19+
dp[i][i] = true;
20+
}
21+
22+
// Check for palindromes of length 2.
23+
for (let i = 0; i < len - 1; i++) {
24+
if (s[i] === s[i + 1]) {
25+
dp[i][i + 1] = true;
26+
start = i;
27+
maxLen = 2;
28+
}
29+
}
30+
31+
// Check for palindromes of length greater than 2.
32+
for (let k = 3; k <= len; k++) {
33+
for (let i = 0; i <= len - k; i++) {
34+
const j = i + k - 1;
35+
36+
if (dp[i + 1][j - 1] && s[i] === s[j]) {
37+
dp[i][j] = true;
38+
39+
if (k > maxLen) {
40+
start = i;
41+
maxLen = k;
42+
}
43+
}
44+
}
45+
}
46+
47+
return s.substring(start, start + maxLen);
48+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution:
2+
def longestPalindrome(self, s: str) -> str:
3+
def expandAroundCenter(left, right):
4+
while left >= 0 and right < len(s) and s[left] == s[right]:
5+
left -= 1
6+
right += 1
7+
return s[left + 1 : right]
8+
9+
longest = ""
10+
11+
for i in range(len(s)):
12+
# Odd length palindrome
13+
palindrome1 = expandAroundCenter(i, i)
14+
if len(palindrome1) > len(longest):
15+
longest = palindrome1
16+
17+
# Even length palindrome
18+
palindrome2 = expandAroundCenter(i, i + 1)
19+
if len(palindrome2) > len(longest):
20+
longest = palindrome2
21+
22+
return longest
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
impl Solution {
2+
pub fn longest_palindrome(s: String) -> String {
3+
let chars: Vec<char> = s.chars().collect();
4+
let len = chars.len();
5+
6+
if len <= 1 {
7+
return s;
8+
}
9+
10+
let mut dp = vec![vec![false; len]; len];
11+
let mut start = 0;
12+
let mut max_len = 1;
13+
14+
// All substrings of length 1 are palindromes.
15+
for i in 0..len {
16+
dp[i][i] = true;
17+
}
18+
19+
// Check for palindromes of length 2.
20+
for i in 0..len - 1 {
21+
if chars[i] == chars[i + 1] {
22+
dp[i][i + 1] = true;
23+
start = i;
24+
max_len = 2;
25+
}
26+
}
27+
28+
// Check for palindromes of length greater than 2.
29+
for k in 3..=len {
30+
for i in 0..(len - k + 1) {
31+
let j = i + k - 1;
32+
33+
if dp[i + 1][j - 1] && chars[i] == chars[j] {
34+
dp[i][j] = true;
35+
36+
if k > max_len {
37+
start = i;
38+
max_len = k;
39+
}
40+
}
41+
}
42+
}
43+
44+
chars[start..start + max_len].iter().collect()
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
function longestPalindrome(s: string): string {
2+
const len = s.length;
3+
4+
if (len <= 1) {
5+
return s;
6+
}
7+
8+
let start = 0;
9+
let maxLen = 1;
10+
11+
const dp: boolean[][] = new Array(len)
12+
.fill(0)
13+
.map(() => new Array(len).fill(false));
14+
15+
// All substrings of length 1 are palindromes.
16+
for (let i = 0; i < len; i++) {
17+
dp[i][i] = true;
18+
}
19+
20+
// Check for palindromes of length 2.
21+
for (let i = 0; i < len - 1; i++) {
22+
if (s[i] === s[i + 1]) {
23+
dp[i][i + 1] = true;
24+
start = i;
25+
maxLen = 2;
26+
}
27+
}
28+
29+
// Check for palindromes of length greater than 2.
30+
for (let k = 3; k <= len; k++) {
31+
for (let i = 0; i <= len - k; i++) {
32+
const j = i + k - 1;
33+
34+
if (dp[i + 1][j - 1] && s[i] === s[j]) {
35+
dp[i][j] = true;
36+
37+
if (k > maxLen) {
38+
start = i;
39+
maxLen = k;
40+
}
41+
}
42+
}
43+
}
44+
45+
return s.substring(start, start + maxLen);
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
## [5. Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring)
2+
3+
Given a string `s`, return _the longest
4+
palindromic substring in `s`_.
5+
6+
#### Example 1:
7+
8+
<pre>
9+
<strong>Input:</strong> s = "babad"
10+
<strong>Output:</strong> "bab"
11+
<strong>Explanation:</strong> "aba" is also a valid answer.
12+
</pre>
13+
14+
#### Example 2:
15+
16+
<pre>
17+
<strong>Input:</strong> s = "cbbd"
18+
<strong>Output:</strong> "bb"
19+
</pre>
20+
21+
#### Constraints:
22+
23+
- `1 <= s.length <= 1000`
24+
- `s` consist of only digits and English letters.

0 commit comments

Comments
 (0)