Description
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1:
Input: “babad”
Output: “bab”
Note: “aba” is also a valid answer.
Example2:
Input: “cbbd”
Output: “bb”
My first code :
java:
class Solution {
public String longestPalindrome(String s) {
String cc = "";
int num = 0;
String str = "";
if(s.length()==1)
return s;
for(int i = 0; i < s.length(); i++){
for(int j = i+1; j <= s.length(); j++){
cc = s.substring(i, j);
if(verifyPalindrome(cc) && cc.length()>num){
num = cc.length();
str = cc.substring(0,num);
}
}
}
return str;
}
public Boolean verifyPalindrome(String s){
int a = s.length();
if(a == 1){
return true;
}
for(int i = 0; i < a/2; i++){
if(s.charAt(i) != s.charAt(a-1-i)){
return false;
}
}
return true;
}
}
But the result is Time Limit Exceeded.
Optimized code:
java:
class Solution {
public String longestPalindrome(String s) {
int n = s.length();
String res = null;
boolean[][] dp = new boolean[n][n];
for (int i = n - 1; i >= 0; i--) {
for (int j = i; j < n; j++) {
dp[i][j] = s.charAt(i) == s.charAt(j) && (j - i < 3 || dp[i + 1][j - 1]);
if (dp[i][j] && (res == null || j - i + 1 > res.length())) {
res = s.substring(i, j + 1);
}
}
}
return res;
}
}
Runtime: 202 ms.
- Time complexity : O(2^n).
Better code:
Thinking…