在C ++中带子字符串的二进制字符串表示1到N
假设我们有一个二进制字符串S和一个正整数N,当且仅当对于从1到N的每个整数X,X的二进制表示形式是给定S的子字符串时,我们必须说为true。因此,如果S =“ 0110 ”且N = 3,则结果为true,因为0110中存在1,10和11。
为了解决这个问题,我们将遵循以下步骤-
定义一个方法
convert()
,将n作为输入ret:=一个空字符串
当n不为0时
ret:= ret连接n mod 2
n:= n / 2
反向退回
在主要方法中,执行以下操作
对于i:= N,当i> = N / 2时,将i减1
温度:= 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
以上是 在C ++中带子字符串的二进制字符串表示1到N 的全部内容, 来源链接: utcz.com/z/356273.html