Let's say a positive integer is a super-palindrome if it is a palindrome, and it is also the square of a palindrome.
Given two positive integers left and right represented as strings, return the number of super-palindromes integers in the inclusive range[left, right].
Example 1:
Input: left = "4", right = "1000"
Output: 4
Explanation: 4, 9, 121, and 484 are superpalindromes.
Note that 676 is not a superpalindrome: 26 * 26 = 676, but 26 is not a palindrome.
Example 2:
Input: left = "1", right = "2"
Output: 1
Constraints:
1 <= left.length, right.length <= 18
left and right consist of only digits.
left and right cannot have leading zeros.
left and right represent integers in the range [1, 1018 - 1].
left is less than or equal to right.
Solutions
Solution 1: Preprocessing + Enumeration
According to the problem description, we assume that the super palindrome number \(x = p^2 \in [1, 10^{18})\), where \(p\) is a palindrome number, so \(p \in [1, 10^9)\). We can enumerate the first half of the palindrome number \(p\), then reverse it, and concatenate it to get all palindrome numbers, which are recorded in the array \(ps\).
Next, we traverse the array \(ps\). For each \(p\), we calculate \(p^2\), check whether it is in the interval \([L, R]\), and also check whether \(p^2\) is a palindrome number. If it is, the answer is incremented by one.
After the traversal, return the answer.
The time complexity is \(O(M^{\frac{1}{4}} \times \log M)\), and the space complexity is \(O(M^{\frac{1}{4}})\). Where \(M\) is the upper bound of \(L\) and \(R\), and in this problem, \(M \leq 10^{18}\).