สมมติว่าเรามีสตริงไบนารี S และจำนวนเต็มบวก N เราต้องบอกว่าจริงก็ต่อเมื่อสำหรับทุกจำนวนเต็ม X ตั้งแต่ 1 ถึง N การแทนค่าไบนารีของ X เป็นสตริงย่อยของ S ที่กำหนด ดังนั้นหาก S =“0110 ” และ N =3 ผลลัพธ์จะเป็นจริง เนื่องจาก 1, 10 และ 11 ทั้งหมดมีอยู่ใน 0110
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดวิธีการแปลง () ที่จะใช้ n เป็นอินพุต
-
ret :=สตริงว่าง
-
ในขณะที่ n ไม่ใช่ 0
-
ret :=ret concatenate n mod 2
-
n :=n / 2
-
-
ย้อนกลับและย้อนกลับ
-
จากวิธีหลัก ให้ทำดังนี้
-
สำหรับ i :=N, เมื่อ i>=N/2, ลด i ลง 1
-
อุณหภูมิ :=แปลง (i)
-
ถ้าอุณหภูมิไม่อยู่ใน S ให้คืนค่าเท็จ
-
-
คืนค่าเป็นจริง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#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