2311. Longest Binary Subsequence Less Than or Equal to K
Description
You are given a binary string s and a positive integer k.
Return the length of the longest subsequence of s that makes up a binary number less than or equal to k.
Note:
- The subsequence can contain leading zeroes.
- The empty string is considered to be equal to
0. - A subsequence is a string that can be derived from another string by deleting some or no characters without changing the order of the remaining characters.
Example 1:
Input: s = "1001010", k = 5 Output: 5 Explanation: The longest subsequence of s that makes up a binary number less than or equal to 5 is "00010", as this number is equal to 2 in decimal. Note that "00100" and "00101" are also possible, which are equal to 4 and 5 in decimal, respectively. The length of this subsequence is 5, so 5 is returned.
Example 2:
Input: s = "00101001", k = 1 Output: 6 Explanation: "000001" is the longest subsequence of s that makes up a binary number less than or equal to 1, as this number is equal to 1 in decimal. The length of this subsequence is 6, so 6 is returned.
Constraints:
1 <= s.length <= 1000s[i]is either'0'or'1'.1 <= k <= 109
Solutions
Solution 1: Greedy
Thinking
The subsequence must encode a value \(\le k\). \(|s| \le 1000\), so subset enumeration is impossible. Zeros never increase the value and should all be kept.
A \(1\) in a higher place costs more, so scan from the right and try to take each \(1\). Treat the current length as its bit index; keep it if the new value stays \(\le k\). Beyond about \(30\) bits the value exceeds \(k\), so those ones are skipped.
The longest binary subsequence must include all the \(0\)s in the original string. On this basis, we traverse \(s\) from right to left. If we encounter a \(1\), we check if adding this \(1\) to the subsequence keeps the binary number \(v \leq k\).
The time complexity is \(O(n)\), where \(n\) is the length of the string \(s\). The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 10 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |