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++ 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 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 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# 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 |
<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)