您的位置:首页 > 编程语言 > Java开发

leetcode Longest Palindromic Substring(Java)

2017-06-09 22:24 489 查看
题目链接:点击打开链接

题目类型:字符串处理

解法:暴力遍历,但是超时了。。。

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: