📌  相关文章
📜  Python3程序查找在二进制字符串的任何旋转中连续放置在开始和结束处的最大0数

📅  最后修改于: 2022-05-13 01:55:44.469000             🧑  作者: Mango

Python3程序查找在二进制字符串的任何旋转中连续放置在开始和结束处的最大0数

给定一个大小为N的二进制字符串S ,任务是使给定字符串S的任何旋转的开始和结束处出现的连续0的计数总和最大化。

例子:

朴素方法:最简单的想法是生成给定字符串的所有旋转,并且对于每个旋转,计算字符串开头和结尾出现的 0 的数量并计算它们的总和。最后,打印得到的最大总和。

下面是上述方法的实现:

Python3
# Python3 program for the above approach
  
# Function to find the maximum sum of
# consecutive 0s present at the start
# and end of a string present in any
# of the rotations of the given string
def findMaximumZeros(st, n):
  
    # Check if all the characters
    # in the string are 0
    c0 = 0
  
    # Iterate over characters
    # of the string
    for i in range(n):
        if (st[i] == '0'):
            c0 += 1
  
    # If the frequency of '1' is 0
    if (c0 == n):
  
        # Print n as the result
        print(n)
        return
  
    # Concatenate the string
    # with itself
    s = st + st
  
    # Stores the required result
    mx = 0
  
    # Generate all rotations of the string
    for i in range(n):
  
        # Store the number of consecutive 0s
        # at the start and end of the string
        cs = 0
        ce = 0
  
        # Count 0s present at the start
        for j in range(i, i + n):
            if (s[j] == '0'):
                cs += 1
            else:
                break
  
        # Count 0s present at the end
        for j in range(i + n - 1, i - 1, -1):
            if (s[j] == '0'):
                ce += 1
            else:
                break
  
        # Calculate the sum
        val = cs + ce
  
        # Update the overall
        # maximum sum
        mx = max(val, mx)
  
    # Print the result
    print(mx)
  
# Driver Code
if __name__ == "__main__":
  
    # Given string
    s = "1001"
  
    # Store the size of the string
    n = len(s)
  
    findMaximumZeros(s, n)
  
    # This code is contributed by ukasp.


Python3
# Python3 program for the above approach
  
# Function to find the maximum sum of
# consecutive 0s present at the start
# and end of any rotation of the string str
def findMaximumZeros(string, n):
      
    # Stores the count of 0s
    c0 = 0
      
    for i in range(n):
        if (string[i] == '0'):
            c0 += 1
  
    # If the frequency of '1' is 0
    if (c0 == n):
  
        # Print n as the result
        print(n, end = "")
        return
  
    # Stores the required sum
    mx = 0
  
    # Find the maximum consecutive
    # length of 0s present in the string
    cnt = 0
  
    for i in range(n):
        if (string[i] == '0'):
            cnt += 1
        else:
            mx = max(mx, cnt)
            cnt = 0
  
    # Update the overall maximum sum
    mx = max(mx, cnt)
  
    # Find the number of 0s present at
    # the start and end of the string
    start = 0
    end = n - 1
    cnt = 0
  
    # Update the count of 0s at the start
    while (string[start] != '1' and start < n):
        cnt += 1
        start += 1
  
    # Update the count of 0s at the end
    while (string[end] != '1' and  end >= 0):
        cnt += 1
        end -= 1
  
    # Update the maximum sum
    mx = max(mx, cnt)
  
    # Print the result
    print(mx, end = "")
  
# Driver Code
if __name__ == "__main__":
  
    # Given string
    s = "1001"
  
    # Store the size of the string
    n = len(s)
  
    findMaximumZeros(s, n)
  
# This code is contributed by AnkThon


输出:
2

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

有效的方法:这个想法是找到给定字符串中连续 0 的最大数量。另外,在字符串的开头和结尾找到连续0的总和,然后打印其中的最大值。
请按照以下步骤解决问题:

  • 检查字符串中'1'的频率, S是否等于0 。如果发现为真,则打印N的值作为结果。
  • 否则,请执行以下步骤:
    • 将给定字符串中连续 0 的最大数量存储在变量中,例如X
    • 初始化两个变量,0开始,以N-1结束
    • S[start]不等于“ 1 ”时,增加cnt的值并以1开始
    • S[end]不等于 ' 1 ' 时,增加cnt的值并减少end 1
    • 结果打印出Xcnt的最大值。

下面是上述方法的实现:

Python3

# Python3 program for the above approach
  
# Function to find the maximum sum of
# consecutive 0s present at the start
# and end of any rotation of the string str
def findMaximumZeros(string, n):
      
    # Stores the count of 0s
    c0 = 0
      
    for i in range(n):
        if (string[i] == '0'):
            c0 += 1
  
    # If the frequency of '1' is 0
    if (c0 == n):
  
        # Print n as the result
        print(n, end = "")
        return
  
    # Stores the required sum
    mx = 0
  
    # Find the maximum consecutive
    # length of 0s present in the string
    cnt = 0
  
    for i in range(n):
        if (string[i] == '0'):
            cnt += 1
        else:
            mx = max(mx, cnt)
            cnt = 0
  
    # Update the overall maximum sum
    mx = max(mx, cnt)
  
    # Find the number of 0s present at
    # the start and end of the string
    start = 0
    end = n - 1
    cnt = 0
  
    # Update the count of 0s at the start
    while (string[start] != '1' and start < n):
        cnt += 1
        start += 1
  
    # Update the count of 0s at the end
    while (string[end] != '1' and  end >= 0):
        cnt += 1
        end -= 1
  
    # Update the maximum sum
    mx = max(mx, cnt)
  
    # Print the result
    print(mx, end = "")
  
# Driver Code
if __name__ == "__main__":
  
    # Given string
    s = "1001"
  
    # Store the size of the string
    n = len(s)
  
    findMaximumZeros(s, n)
  
# This code is contributed by AnkThon
输出:
2

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

有关更多详细信息,请参阅有关在二进制字符串的任何旋转中连续放置在开头和结尾的最大 0 数的完整文章!