📌  相关文章
📜  检查子字符串“10”是否出现在给定的二进制字符串中所有可能的 '?' 替换中与 1 或 0

📅  最后修改于: 2021-10-25 06:24:10             🧑  作者: Mango

给定一个仅由‘0’‘1’‘?’组成的字符串S , 任务是检查在字符‘?’ 的每个可能替换中是否存在子字符串“10” 。与10

例子:

方法:给定的问题可以通过使用贪心方法来解决,该方法基于观察字符串S 是否包含许多连续的“?” ,它可以替换为单个‘?’在最坏的情况下,我们可以用全10替换它。

因此,想法是通过替换连续的‘?’从给定的字符串S创建一个新字符串用单个‘?’然后检查是否存在“10”“1?0”作为子串,那么在所有可能的替换后有可能得到“10”作为子串,因此,打印Yes 。否则,打印No

下面是上述方法的实现:

Python3
# Python program for the above approach
  
# Function to check it possible to get
# "10" as substring after all possible
# replacements
def check(S, n):
  
    # Initialize empty string ans
    ans = ""
    c = 0
  
    # Run loop n times
    for _ in range(n):
  
        # If char is "?", then increment
        # c by 1
        if S[_] == "?":
            c += 1
        else:
  
            # Continuous '?' characters
            if c:
                ans += "?"
  
            # Their is no consective "?"
            c = 0
            ans += S[_]
              
    # "?" still left
    if c:
        ans += "?"
  
    # Check if "10" or "1?0" exists
    # in the string ans or not
    if "10" in ans or "1?0" in ans:
        return "Yes"
    else:
        return "No"
  
  
# Driver Code
if __name__ == '__main__':
  
    S = "1?0"
    ans = check(S, len(S))
    print(ans)


输出:
Yes

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

注意:相同的方法也可用于子字符串“00”/“01”/“11”,只需稍作改动。

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程