这个 "compute all palindrome substrings" 算法的 运行 时间是多少?

What's the running time of this "compute all palindrome substrings" algorithm?

   public PriorityQueue<String> findPalindromesSubstring(String string) {
        PriorityQueue<String> palindromes = new PriorityQueue<>();
        string = string.replace("","#");
        for (int i = 0; i < string.length(); i++) { //n iterations
            int j = 0;
            while (i-j >= 0 && i+j < string.length() && string.charAt(i-j) == string.charAt(i+j)) {
                String palindrome = string.substring(i-j, i+j+1);
                if (palindrome.charAt(0) != '#') {
                    palindromes.add(palindrome.replace("#", ""));
                }
                j++;
            }

        }
        return palindromes;
    }

我使用了 PriorityQueue,因为我需要按字母顺序排序的回文子串。目前我不关心重复项,但我不确定最坏情况 运行 时间结果,据我了解它类似于

n (chars in string because of for loop)

*

n (max possible length of a palindrome because of inner while loop/2)

*

log(max number of palindromes because of PriorityQueue's add operation)

所以 运行 时间是 O(n^2*logn) ?或者我应该用其他东西替换 n 中的一个吗?

运行时间复杂度为O(N^3*log(N^2))
让我们仔细看看 palindromes.add(palindrome.replace("#", "")); replace 函数进行 O(n)add 函数进行 O(lg N^2) 比较(因为我们最多有 N^2回文,所以堆高为lg N^2)。字符串的每次比较都需要 O(N) 所以这一行的总时间是 O((log N^2) * N + N)