C++ 中表示 1 到 N 的子串的二进制字符串
假设我们有一个二进制字符串 S 和一个正整数 N,如果且仅当从 1 到 N 的每个整数 X 的二进制表示都是给定 S 的子串时,我们必须说 true。因此,如果 S = “0110” 且 N = 3,则结果为 true,因为 1、10 和 11 都存在于 0110 中。
为了解决这个问题,我们将遵循以下步骤:
定义一个方法 convert(),它将 n 作为输入
ret := 一个空字符串
当 n 不为 0 时
ret := ret 与 n mod 2 的连接
n := n / 2
反转 ret 并返回
从主方法中执行以下操作
对于 i := N,当 i >= N/2 时,i 减 1
temp := convert(i)
如果 temp 不在 S 中,则返回 false
返回 true。
让我们看看下面的实现来更好地理解:
示例
#include <bits/stdc++.h> using namespace std; class Solution { public: string convert(int n){ string ret = ""; while(n){ ret += (n % 2) + '0'; n /= 2; } reverse(ret.begin(), ret.end()); return ret; } bool queryString(string S, int N) { for(int i = N; i >= N/2; i-- ){ string temp = convert(i); if(S.find(temp) == string::npos) return false; } return true; } }; main(){ Solution ob; cout << (ob.queryString("0110", 3)); }
输入
"0110" 3
输出
1
广告