改善我的回文子串程序性能以及O(n)O(n2)是什么

时间:2019-02-11 04:20:46

标签: java string performance

在这里,我编写了一个程序,该程序将在给定的字符串中打印最长回文子字符串。.在这里,您可以建议我如何提高该程序的性能。.

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]);

1 个答案:

答案 0 :(得分:0)

大O表示法是衡量复杂性的指标,您希望将其保持在尽可能低的水平。 O(n)是线性复杂度,并且好O(n ^ 2)是多项式,比O(n)差,但是取决于问题,它可以是好是坏。

n是输入参数的大小。在您的问题中,n是输入字符串的字符数。您正在使用大小为n的嵌套循环。因此,内部循环将执行n ^ 2次,并且您的复杂度为O(n ^ 2)。请记住,两个相邻的n个循环的复杂度为O(2 * n)= O(n)。

要降低复杂度,您将不得不在解决方案中产生非嵌套循环。我不确定您的代码中发生了什么,似乎某些复制粘贴出错了。另外,我不确定您所遇到问题的所有限制。