Java上最长的回文子字符串(leetcode)

时间:2018-09-20 12:58:22

标签: java palindrome

在leetcode中,我尝试解决“最长回文子串”任务。这是代码:

public String longestPalindrome(String s) {
    String str = "";

    for(int i = 0; i < s.length(); i++)
    {
        for(int j = 1 + i; j < s.length() + 1; j++)
        {
            String sub = s.substring(i, j);
            if(isPalindrome(sub) && sub.length() > str.length())
            {
                str = s.substring(i, j);
            }
        }
    }
    return str;
}

public static boolean isPalindrome(String s)
{
    if(s.length() < 2)
        return true;
    else
        for(int i = 0; i < s.length() / 2; i++)
        {
            if(!(s.charAt(i) == s.charAt(s.length() - 1 - i)))
                return false;                   
        }
    return true;            
}

当我在Eclipse中运行它时它可以工作,但是当我要将解决方案提交给leetcode时,它显示了一个错误:

Submission Result: Time Limit Exceeded
Last executed input:
"eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee...

你能告诉我,我有什么问题吗?

2 个答案:

答案 0 :(得分:0)

您的代码花费了太多时间进行leetcode

for(int j = 1 + i; j < s.length() + 1; j++){
        String sub = s.substring(i, j);
        if(isPalindrome(sub) && sub.length() > str.length()){
            str = s.substring(i, j);
        }
}

在此循环中,您调用了2次s.substring(i,j);您可以先调用1次

for(int j = 1 + i; j < s.length() + 1; j++){
        String sub = s.substring(i, j);
        if(isPalindrome(sub) && sub.length() > str.length()){
            str = sub;
        }
}

然后您可以在Internet上搜索:

https://www.geeksforgeeks.org/longest-palindrome-substring-set-1/

您有2种蛮力和优化方法

答案 1 :(得分:0)

您的回答是耗费大量的时间来运行。替代蛮力方法,尝试对其进行优化。 如果您在处理动态方法时遇到问题,这是一个更好的解决方案:

import React from "react";

const SimpleDiv = ({ num }) => <div>block - {num}</div>;

const LoopComponent = ({ loopNum }) => {
  return [...Array(loopNum)].map((_, index) => (
    <SimpleDiv key={index} num={index + 1} />
  ));
};

export default function App() {
  return (
    <div>
      <LoopComponent loopNum={2} />
      <LoopComponent loopNum={3} />
    </div>
  );
}