2025-06-26 Daily Challenge
Today I have done leetcode's June LeetCoding Challenge with cpp
.
June LeetCoding Challenge 26
Description
Longest Binary Subsequence Less Than or Equal to K
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 <= 1000
s[i]
is either'0'
or'1'
.1 <= k <= 109
Solution
class Solution {
public:
int longestSubsequence(string s, int k) {
reverse(s.begin(), s.end());
int current = 0;
int exp = 1;
int answer = 0;
for(auto c : s) {
if(c == '1') {
if(exp > k || exp + current > k) continue;
current += exp;
answer += 1;
} else {
answer += 1;
}
if(INT_MAX / 2 > exp) exp *= 2;
}
return answer;
}
};
// Accepted
// 153/153 cases passed (0 ms)
// Your runtime beats 100 % of cpp submissions
// Your memory usage beats 50.75 % of cpp submissions (9.5 MB)