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)