3817. Good Indices in a Digit String π
Description
You are given a string s consisting of digits.
An index i is called good if there exists a substring of s that ends at index i and is equal to the decimal representation of i.
Return an integer array of all good indices in increasing order.
Example 1:
Input: s = "0234567890112"
Output: [0,11,12]
Explanation:βββββββ
-
At index 0, the decimal representation of the index is
"0". The substrings[0]is"0", which matches, so index0is good. -
At index 11, the decimal representation is
"11". The substrings[10..11]is"11", which matches, so index11is good. -
At index 12, the decimal representation is
"12". The substrings[11..12]is"12", which matches, so index12is good.
No other index has a substring ending at it that equals its decimal representation. Therefore, the answer is [0, 11, 12].
Example 2:
Input: s = "01234"
Output: [0,1,2,3,4]
Explanation:
For every index i from 0 to 4, the decimal representation of i is a single digit, and the substring s[i] matches that digit.
Therefore, a valid substring ending at each index exists, making all indices good.
Example 3:
Input: s = "12345"
Output: []
Explanation:
No index has a substring ending at it that matches its decimal representation.
Therefore, there are no good indices and the result is an empty array.
Constraints:
1 <= s.length <= 105sonly consists of digits from'0'to'9'.
Solutions
Solution 1: Simulation
We observe that the maximum length of string \(s\) is \(10^5\), and the length of the decimal representation of index \(i\) is at most \(6\) (since the decimal representation of \(10^5\) is \(100000\), which has a length of \(6\)). Therefore, we only need to check for each index \(i\) whether the substring corresponding to its decimal representation is equal to it.
The time complexity is \(O(n)\), where \(n\) is the length of the string \(s\). The space complexity is \(O(1)\), ignoring the space required for the answer.
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 | |