ในปัญหานี้ เราได้รับอาร์เรย์ bin[] ขนาด n ของสตริงไบนารี งานของเราคือสร้างโปรแกรมเพื่อค้นหา Bitwise OR (&) ของ n สตริงไบนารี
ที่นี่ เราจะนำตัวเลขทั้งหมดมาและหาค่าระดับบิต AND ของตัวเลขเหล่านั้น เช่น bin[0] | บิน[1] |... บิน[n-2] | บิน[n]
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล −
bin[] = {“1001”, “11001”, “010101”}
ผลผลิต −
011101
คำอธิบาย − Bitwise OR ของสตริงไบนารีทั้งหมด -
(1001) | (11001) | (010101) = 011101
เพื่อแก้ปัญหานี้ เราจะหาสตริงที่มีจำนวนบิตมากที่สุด (สตริงที่มีความยาวสูงสุด) จากนั้นเราจะเพิ่มจำนวนที่เพียงพอของ 0 นำหน้าให้กับสตริงทั้งหมด จากนั้นหา Bitwise OR ของบิต
มาดูตัวอย่างการทำงานของอัลกอริธึมกัน −
bin[] = {“1101”, “011010” , “00111”}
สตริงที่มีความยาวสูงสุดคือ 011010 โดยมีความยาว 6 ดังนั้น เราจะเพิ่ม 0 นำหน้าไปยังสตริงอื่นๆ
อัปเดตสตริง - “001101”, “011010”, “000111”
การหา BITWISE OR ของสตริงทั้งหมด − 001101 | 011010 | 000111 =011111
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา -
#include <bits/stdc++.h> using namespace std; string bitwiseOR(string* bin, int n){ string result; int max_size = INT_MIN; for (int i = 0; i < n; i++) { max_size = max(max_size, (int)bin[i].size()); reverse(bin[i].begin(), bin[i].end()); } for (int i = 0; i < n; i++) { string s; for (int j = 0; j < max_size - bin[i].size(); j++) s += '0'; bin[i] = bin[i] + s; } for (int i = 0; i < max_size; i++) { int insertBit = 0; for (int j = 0; j < n; j++) insertBit = insertBit | (bin[j][i] - '0'); result += (insertBit + '0'); } reverse(result.begin(), result.end()); return result; } int main() { string bin[] = { "1101", "011010", "00111" }; int n = sizeof(bin) / sizeof(bin[0]); cout<<"The bitwise OR of all the binary String of the string array is "<<bitwiseOR(bin, n); return 0; }
ผลลัพธ์
The bitwise OR of all the binary String of the string array is 011111