Skip to content

Latest commit

 

History

History

2450

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

You are given a binary string s and a positive integer k.

You can apply the following operation on the string any number of times:

  • Choose any substring of size k from s and flip all its characters, that is, turn all 1's into 0's, and all 0's into 1's.

Return the number of distinct strings you can obtain. Since the answer may be too large, return it modulo 109 + 7.

Note that:

  • A binary string is a string that consists only of the characters 0 and 1.
  • A substring is a contiguous part of a string.

 

Example 1:

Input: s = "1001", k = 3
Output: 4
Explanation: We can obtain the following strings:
- Applying no operation on the string gives s = "1001".
- Applying one operation on the substring starting at index 0 gives s = "0111".
- Applying one operation on the substring starting at index 1 gives s = "1110".
- Applying one operation on both the substrings starting at indices 0 and 1 gives s = "0000".
It can be shown that we cannot obtain any other string, so the answer is 4.

Example 2:

Input: s = "10110", k = 5
Output: 2
Explanation: We can obtain the following strings:
- Applying no operation on the string gives s = "10110".
- Applying one operation on the whole string gives s = "01001".
It can be shown that we cannot obtain any other string, so the answer is 2.

 

Constraints:

  • 1 <= k <= s.length <= 105
  • s[i] is either 0 or 1.

Companies: Microsoft

Related Topics:
Math, String

Similar Questions:

Solution 1.

The answer is $2^{N-k+1}$ -- we have N-k+1 places to choose to do the flipping or not.

// OJ: https://leetcode.com/problems/number-of-distinct-binary-strings-after-applying-operations
// Author: github.com/lzl124631x
// Time: O(log(N - k))
// Space: O(1)
class Solution {
    int pow(long base, long e, long mod) {
        long ans = 1;
        while (e) {
            if (e & 1) ans = ans * base % mod;
            e >>= 1;
            base = base * base % mod;
        }
        return ans;
    }
public:
    int countDistinctStrings(string s, int k) {
        return pow(2, s.size() - k + 1, 1e9 + 7);
    }
};