在这里,我编写了一个程序,该程序将在给定的字符串中打印最长回文子字符串。.在这里,您可以建议我如何提高该程序的性能。.
void longestPalindrome(){
String str = "malayalam";
String pal = "";
int c = 0;
String arr[] = new String[100];
for(int i=0;i<str.length();i++){
for(int j=i;j<str.length();j++){
if(str.charAt(i)==str.charAt(j)){
pal = str.substring(i,j+1);
if(pal.length()>2 && checkPalindrome(pal)){
System.out.println(pal);
arr[c] = pal;
c=c+1;
}
pal = "";
}
}
}
String newArray[] = new String[c];
System.out.print("The Palindromes are!!-->>>");
for(int k=0;k<c;k++){
newArray[k] = arr[k];
System.out.print(newArray[k]+",");
}
System.out.println();
if(newArray.length>1){
for(int i=0;i<newArray.length;i++){
for(int j=i+1;j<newArray.length;j++)
if(newArray[i].length() < newArray[j].length()){
String temp = newArray[i];
newArray[i] = newArray[j];
newArray[j] = temp;
}
}
}
if(newArray.length>0)
System.out.println("The LONGEST PALINDROME --- "+newArray[0]);
答案 0 :(得分:0)
大O表示法是衡量复杂性的指标,您希望将其保持在尽可能低的水平。 O(n)是线性复杂度,并且好O(n ^ 2)是多项式,比O(n)差,但是取决于问题,它可以是好是坏。
n是输入参数的大小。在您的问题中,n是输入字符串的字符数。您正在使用大小为n的嵌套循环。因此,内部循环将执行n ^ 2次,并且您的复杂度为O(n ^ 2)。请记住,两个相邻的n个循环的复杂度为O(2 * n)= O(n)。
要降低复杂度,您将不得不在解决方案中产生非嵌套循环。我不确定您的代码中发生了什么,似乎某些复制粘贴出错了。另外,我不确定您所遇到问题的所有限制。