📜  实现给定布尔表达式所需的基本逻辑门的最小数量

📅  最后修改于: 2021-04-17 16:58:44             🧑  作者: Mango

给定一个表示布尔表达式的长度为N的字符串S ,任务是找到实现给定表达式所需的AND,OR和NOT门的最小数量。

例子:

方法:请按照以下步骤解决问题:

  1. 遍历字符串的字符。
  2. 初始化,门数为0
  3. 如果当前字符是“。”‘+’‘1’ ,然后将门数增加1
  4. 打印所需的门数。

下面是上述方法的实现:

C++
// C++ implementataion of
// the above approach
#include 
using namespace std;
 
// Function to coutn 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 implementataion of
// the above approach
class GFG{
 
// Function to coutn 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 implementataion of
# the above approach
 
# Function to coutn 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# implementataion of
// the above approach
using System;
public class GFG
{
 
// Function to coutn 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


输出:
3

时间复杂度: O(N)
辅助空间: O(1)