在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...
你能告诉我,我有什么问题吗?
答案 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>
);
}