热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带1或0

检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0原文:https://www . gee

检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0

原文:https://www . geeksforgeeks . org/check-if-substring-10-in-给定二进制-string-in-all-replacements-with-1 或-0/

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

示例:

输入:S =“1?0"
输出:
解释:
以下是“?”的所有可能替代项:


  1. 替换“?”用 0 将字符串修改为“100”。在修改字符串中,出现子字符串“10”。

  2. 替换“?”用 1 将字符串修改为“110”。在修改字符串中,出现子字符串“10”。

从以上所有可能的替换中,子字符串“10”出现在所有替换中,因此,打印“是”。

输入: S=??"
T3】输出:否

方法:给定的问题可以通过使用 贪婪方法 来解决,该方法基于以下观察:如果字符串 S 包含许多连续的“?”,可以换成单个'?'最坏的情况下我们可以全部用 1s 或者 0s 代替。

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

下面是上述方法的实现:

C++


// C++ Program to implement
// the above approach
#include <iostream>
using namespace std;
// Function to check it possible to get
// "10" as substring after all possible
// replacements
string check(string S, int n)
{
  // Initialize empty string ans
  string ans = "";
  int c = 0;
  // Run loop n times
  for (int i = 0; i < n; i++) {
    // If char is "?", then increment
    // c by 1
    if (S[i] == '?') {
      c++;
    }
    else {
      // Continuous '?' characters
      if (c) {
        ans += "?";
      }
      c = 0;
      ans += S[i];
    }
  }
  // Their is no consecutive "?"
  if (c) {
    ans += "?";
  }
  // Check if "10" or "1?0" exists
  // in the string ans or not
  if (ans.find("10") != -1 || ans.find("1?0") != -1) {
    return "Yes";
  }
  else {
    return "No";
  }
}
// Driver code
int main()
{
  string S = "1?0";
  int n = S.size();
  string ans = check(S, n);
  cout << ans;
  return 0;
}
// This code is contributed by parthmanchanda81


Java 语言(一种计算机语言,尤用于创建网站)


// Java program for the above approach
import java.io.*;
class GFG {
 // Returns true if s1 is substring of s2
    static int isSubstring(String s1, String s2)
    {
        int M = s1.length();
        int N = s2.length();
        /* A loop to slide pat[] one by one */
        for (int i = 0; i <= N - M; i++) {
            int j;
            /* For current index i, check for
            pattern match */
            for (j = 0; j < M; j++)
                if (s2.charAt(i + j) != s1.charAt(j))
                    break;
            if (j == M)
                return i;
        }
        return -1;
    }
// Function to check it possible to get
// "10" as substring after all possible
// replacements
static String check(String S, int n)
{
  // Initialize empty string ans
  String ans = "";
  int c = 0;
  // Run loop n times
  for (int i = 0; i < n; i++) {
    // If char is "?", then increment
    // c by 1
    if (S.charAt(i) == '?') {
      c++;
    }
    else {
      // Continuous '?' characters
      if (c != 0) {
        ans += "?";
      }
      c = 0;
      ans += S.charAt(i);
    }
  }
  // Their is no consecutive "?"
  if (c != 0) {
    ans += "?";
  }
  // Check if "10" or "1?0" exists
  // in the string ans or not
  if (isSubstring("10", S) != -1 || isSubstring("1?0", S) != -1) {
    return "Yes";
  }
  else {
    return "No";
  }
}
// Driver Code
public static void main (String[] args)
{
    String S = "1?0";
        int n = S.length();
        String ans = check(S, n);
        System.out.println(ans);
}
}
// This code is contributed by avijitmondal1998.


Python 3


# 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 consecutive "?"
            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)


C


// C# program for the approach
using System;
using System.Collections.Generic;
class GFG {
 // Returns true if s1 is substring of s2
    static int isSubstring(string s1, string s2)
    {
        int M = s1.Length;
        int N = s2.Length;
        /* A loop to slide pat[] one by one */
        for (int i = 0; i <= N - M; i++) {
            int j;
            /* For current index i, check for
            pattern match */
            for (j = 0; j < M; j++)
                if (s2[i + j] != s1[j])
                    break;
            if (j == M)
                return i;
        }
        return -1;
    }
// Function to check it possible to get
// "10" as substring after all possible
// replacements
static string check(string S, int n)
{
  // Initialize empty string ans
  string ans = "";
  int c = 0;
  // Run loop n times
  for (int i = 0; i < n; i++) {
    // If char is "?", then increment
    // c by 1
    if (S[i] == '?') {
      c++;
    }
    else {
      // Continuous '?' characters
      if (c != 0) {
        ans += "?";
      }
      c = 0;
      ans += S[i];
    }
  }
  // Their is no consecutive "?"
  if (c != 0) {
    ans += "?";
  }
  // Check if "10" or "1?0" exists
  // in the string ans or not
  if (isSubstring("10", S) != -1 || isSubstring("1?0", S) != -1) {
    return "Yes";
  }
  else {
    return "No";
  }
}
    // Driver Code
    public static void Main()
    {
        string S = "1?0";
        int n = S.Length;
        string ans = check(S, n);
        Console.Write(ans);
    }
}
// This code is contributed by sanjoy_62.


java 描述语言


  <script>
        // Javascript Program to implement
        // the above approach
        // Function to check it possible to get
        // "10" as substring after all possible
        // replacements
        function check(S, n) {
            // Initialize empty string ans
            ans = ""
            c = 0
            // Run loop n times
            for (let i = 0; i < n; i++) {
                // If char is "?", then increment
                // c by 1
                if (S[i] == "?")
                    c += 1
                else
                    // Continuous '?' characters
                    if (c != 0)
                        ans += "?"
                // Their is no consecutive "?"
                c = 0
                ans += S[i]
                // "?" still left
                if (c != 0)
                    ans += "?"
            }
            // Check if "10" or "1?0" exists
            // in the string ans or not
            if (ans.includes('10') || ans.includes('1?0'))
                return "Yes"
            else
                return "No"
        }
        // Driver Code
        S = "1?0"
        ans = check(S, S.length)
        document.write(ans)
// This code is contributed by Potta Lokesh
    script>

Output: 

Yes

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

注意:同样的方法也可以用于子串“00”/“01”/“11”以及微小的改变。


推荐阅读
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 在多线程编程环境中,线程之间共享全局变量可能导致数据竞争和不一致性。为了解决这一问题,Linux提供了线程局部存储(TLS),使每个线程可以拥有独立的变量副本,确保线程间的数据隔离与安全。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文探讨了 C++ 中普通数组和标准库类型 vector 的初始化方法。普通数组具有固定长度,而 vector 是一种可扩展的容器,允许动态调整大小。文章详细介绍了不同初始化方式及其应用场景,并提供了代码示例以加深理解。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 文件描述符、文件句柄与打开文件之间的关联解析
    本文详细探讨了文件描述符、文件句柄和打开文件之间的关系,通过具体示例解释了它们在操作系统中的作用及其相互影响。 ... [详细]
author-avatar
飞轶尘埃_130
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有