leetcode Longest Palindromic Substring(Java)
2017-06-09 22:24
489 查看
题目链接:点击打开链接
题目类型:字符串处理
解法:暴力遍历,但是超时了。。。
解法:从中心扩展验证回文子串
public class Solution {
private int max_start;
private int max_len;
private void extendPalindrome(String s, int start, int end)
{
while (start >=0 && end < s.length() && s.charAt(start) == s.charAt(end))
{
--start;
++end;
}
if (max_len < end - start- 1)
{
max_start = start + 1;
max_len = end - start - 1;
}
}
public String longestPalindrome(String s) {
int len = s.length();
if (len < 2)
return s;
for (int i = 0 ; i < len ; ++i)
{
extendPalindrome(s, i, i);
extendPalindrome(s, i, i+1);
}
return s.substring(max_start, max_start + max_len);
}
}
题目类型:字符串处理
解法:暴力遍历,但是超时了。。。
public class Solution { private String curr; public int isPalidrome(int start, int end) { int i = start; int j = end; while (i < j) { if (curr.charAt(i) == curr.charAt(j)) { ++i; --j; } else { return 1; } } return end-start+1; } public String longestPalindrome(String s) { int len = s.length(); int max_start = 0; int max_len = 0; curr = s; if (len == 1) return s; int curr_len = 0; for (int i = 0 ; i < len ; ++i) { for (int j = i+1 ; j < len ; ++j) { curr_len = isPalidrome(i, j); if (max_len < curr_len) { max_start = i; max_len = curr_len; } if (curr_len == len) return s.substring(max_start, max_start+max_len); } } return s.substring(max_start, max_start+max_len); } }解法:动态规划
public String longestPalindrome(String s) { int len = s.length(); int max_len = 1; int max_start = 0; boolean[][] palindrome = new boolean[len][len]; if (len < 2) return s; for (int i = 0 ; i < len ; ++i) { palindrome[i][i] = true; } for (int i = 0 ; i < len - 1 ; ++i) { if (s.charAt(i) == s.charAt(i+1)) { palindrome[i][i+1] = true; max_len = 2; max_start = i; } } for (int c_len = 3 ; c_len <= len ; ++c_len) { for (int i = 0 ; i < len - c_len + 1 ; ++i) { int j = i + c_len - 1; if (palindrome[i+1][j-1] && (s.charAt(i) == s.charAt(j))) { palindrome[i][j] = true; max_start = i; max_len = c_len; } } } return s.substring(max_start, max_start + max_len); }
解法:从中心扩展验证回文子串
public class Solution {
private int max_start;
private int max_len;
private void extendPalindrome(String s, int start, int end)
{
while (start >=0 && end < s.length() && s.charAt(start) == s.charAt(end))
{
--start;
++end;
}
if (max_len < end - start- 1)
{
max_start = start + 1;
max_len = end - start - 1;
}
}
public String longestPalindrome(String s) {
int len = s.length();
if (len < 2)
return s;
for (int i = 0 ; i < len ; ++i)
{
extendPalindrome(s, i, i);
extendPalindrome(s, i, i+1);
}
return s.substring(max_start, max_start + max_len);
}
}
相关文章推荐
- Longest Palindromic Substring leetcode java
- [LeetCode][Java]Longest Palindromic Substring
- LeetCode-Longest Palindromic subString(java)
- [Leetcode] Longest Palindromic Substring (Java)
- [leetcode-5]Longest Palindromic Substring(java)
- 【leetcode with java】5 Longest Palindromic Substring
- leetcode 005 Longest Palindromic Substring(java)
- (leetcode)5.最大回文子字符串 Longest Palindromic Substring--Java
- leetcode-java-5. Longest Palindromic Substring
- 【LeetCode-面试算法经典-Java实现】【05-Longest Palindromic Substring(最大回文字符串)】
- Leetcode: Longest Palindromic Substring. java
- 【LeetCode-面试算法经典-Java实现】【005-Longest Palindromic Substring(最长回文子串)】
- Leetcode Solution of Longest Palindromic Substring in Java
- leetcode: 5. Longest Palindromic Substring (java)
- [LeetCode] 005. Longest Palindromic Substring (Medium) (C++/Java/Python)
- Java [leetcode 5] Longest Palindromic Substring
- [Java]LeetCode5 Longest Palindromic Substring
- 【LeetCode-面试算法经典-Java实现】【05-Longest Palindromic Substring(最大回文字符串)】
- [LeetCode]Longest Palindromic Substring(Java)
- Longest Palindromic Substring Leetcode Python Java