Given a string S of length N representing a boolean expression, the task is to find the minimum number of AND, OR, and NOT gates required to realize the given expression.
Examples:
Input: S = “A+B.C”
Output: 2
Explanation: Realizing the expression requires 1 AND gate represented by ‘.’ and 1 OR gate represented by ‘+’.Input: S = “(1 – A). B+C”
Output: 3
Explanation: Realizing the expression requires 1 AND gate represented by ‘.’ and 1 OR gate represented by ‘+’ and 1 NOT gate represented by ‘-‘.
Approach: Follow the steps below to solve the problem:
- Iterate over the characters of the string.
- Initialize, count of gates to 0.
- If the current character is either ‘.’ or ‘+’, or ‘1’, then increment the count of gates by 1
- Print the count of gates required.
Below is the implementation of the above approach:
C++
// C++ implementation of // the above approach #include <bits/stdc++.h> using namespace std; // Function to count the total // number of gates required to // realize the boolean expression S void numberOfGates(string s) { // Length of the string int N = s.size(); // Stores the count // of total gates int ans = 0; // Traverse the string for ( int i = 0; i < ( int )s.size(); i++) { // AND, OR and NOT Gate if (s[i] == '.' || s[i] == '+' || s[i] == '1' ) { ans++; } } // Print the count // of gates required cout << ans; } // Driver Code int main() { // Input string S = "(1-A).B+C" ; // Function call to count the // total number of gates required numberOfGates(S); } |
Java
// Java implementation of // the above approach class GFG{ // Function to count the total // number of gates required to // realize the boolean expression S static void numberOfGates(String s) { // Length of the string int N = s.length(); // Stores the count // of total gates int ans = 0 ; // Traverse the string for ( int i = 0 ; i < ( int )s.length(); i++) { // AND, OR and NOT Gate if (s.charAt(i) == '.' || s.charAt(i) == '+' || s.charAt(i) == '1' ) { ans++; } } // Print the count // of gates required System.out.println(ans); } // Driver Code public static void main(String[] args) { // Input String S = "(1-A).B+C" ; // Function call to count the // total number of gates required numberOfGates(S); } } // This code is contributed by user_qa7r |
Python3
# Python3 implementation of # the above approach # Function to count the total # number of gates required to # realize the boolean expression S def numberOfGates(s): # Length of the string N = len (s) # Stores the count # of total gates ans = 0 # Traverse the string for i in range ( len (s)): # AND, OR and NOT Gate if (s[i] = = '.' or s[i] = = '+' or s[i] = = '1' ): ans + = 1 # Print the count # of gates required print (ans, end = "") # Driver Code if __name__ = = "__main__" : # Input S = "(1-A).B+C" # Function call to count the # total number of gates required numberOfGates(S) # This code is contributed by AnkThon |
C#
// C# implementation of // the above approach using System; public class GFG { // Function to count the total // number of gates required to // realize the boolean expression S static void numberOfGates( string s) { // Length of the string int N = s.Length; // Stores the count // of total gates int ans = 0; // Traverse the string for ( int i = 0; i < s.Length; i++) { // AND, OR and NOT Gate if (s[i] == '.' || s[i] == '+' || s[i] == '1' ) { ans++; } } // Print the count // of gates required Console.WriteLine(ans); } // Driver Code public static void Main( string [] args) { // Input string S = "(1-A).B+C" ; // Function call to count the // total number of gates required numberOfGates(S); } } // This code is contributed by AnkThon |
Javascript
<script> // JavaScript program for the above approach // Function to count the total // number of gates required to // realize the boolean expression S function numberOfGates(s) { // Length of the string let N = s.length; // Stores the count // of total gates let ans = 0; // Traverse the string for (let i = 0; i < s.length; i++) { // AND, OR and NOT Gate if (s[i] == '.' || s[i] == '+' || s[i] == '1' ) { ans++; } } // Print the count // of gates required document.write(ans); } // Driver Code // Input let S = "(1-A).B+C" ; // Function call to count the // total number of gates required numberOfGates(S); </script> |
3
Time Complexity: O(N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!