📌  相关文章
📜  检查二进制字符串在 1 之间是否有 0 |第 1 组(一般方法)

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

检查二进制字符串在 1 之间是否有 0 |第 1 组(一般方法)

给定一个 0 和 1 的字符串,我们需要检查给定的字符串是否有效。当 1 之间不存在零时,给定的字符串是有效的。例如,1111、0000111110、1111000 是有效字符串,但 01010011、01010、101 不是。
这里讨论了一种解决问题的方法,其他使用正则表达式的方法给出了 Set 2
例子:

Input : 100
Output : VALID

Input : 1110001
Output : NOT VALID
There is 0 between 1s

Input : 00011
Output : VALID
Algorithm:
  1. 在字符串中查找 1 的第一次出现。让它成为第一。
  2. 查找字符串中最后一次出现的 1。让它成为最后一个。
  3. 从头到尾运行一个循环,如果有 0,则返回 false。如果没有找到 0,则返回 true。
Explanation:
Suppose we have a string:  01111011110000 
Now take two variables say A and B. run a loop for 0 to length of the string and point A
to the first occurrence of 1, after that again run a loop from length of the string to 0
and point second variable to the last occurrence of 1.
So A = 1 (Position of first '1' is the string) and B = 9 (last occurrence of '1').
Now run a loop from A to B and check that '0' is present between 1 or not, if "YES" than 
set flag to 1 and break the loop, else set flag  to 0.
In this case flag will set to 1 as the given string is not valid and print "NOT VALID".
C++
// C++ program to check if a string is valid or not.
#include 
using namespace std;
 
// Function returns 1 when string is valid
// else returns 0
bool checkString(string s)
{
    int len = s.length();
 
    // Find first occurrence of 1 in s[]
    int first = s.size() + 1;
    for (int i = 0; i < len; i++) {
        if (s[i] == '1') {
            first = i;
            break;
        }
    }
 
    // Find last occurrence of 1 in s[]
    int last = 0;
    for (int i = len - 1; i >= 0; i--) {
        if (s[i] == '1') {
            last = i;
            break;
        }
    }
 
    // Check if there is any 0 in range
    for (int i = first; i <= last; i++)
        if (s[i] == '0')
            return false;
 
    return true;
}
 
// Driver code
int main()
{
    string s = "00011111111100000";
    checkString(s) ? cout << "VALID\n" : cout << "NOT VALID\n";
    return 0;
}


Java
// Java program to check if a string is valid or not.
 
class Test {
    // Method returns 1 when string is valid
    // else returns 0
    static boolean checkString(String s)
    {
        int len = s.length();
 
        // Find first occurrence of 1 in s[]
        int first = 0;
        for (int i = 0; i < len; i++) {
            if (s.charAt(i) == '1') {
                first = i;
                break;
            }
        }
 
        // Find last occurrence of 1 in s[]
        int last = 0;
        for (int i = len - 1; i >= 0; i--) {
            if (s.charAt(i) == '1') {
                last = i;
                break;
            }
        }
 
        // Check if there is any 0 in range
        for (int i = first; i <= last; i++)
            if (s.charAt(i) == '0')
                return false;
 
        return true;
    }
 
    // Driver method
    public static void main(String args[])
    {
        String s = "00011111111100000";
        System.out.println(checkString(s) ? "VALID" : "NOT VALID");
    }
}


Python
# Python3 program to check if
# a string is valid or not.
 
# Function returns 1 when
# string is valid else
# returns 0
def checkString(s):
   
    Len = len(s)
     
    # Find first occurrence
    # of 1 in s[]
    first = len(s) + 1
 
    for i in range(Len):
        if(s[i] == '1'):
            first = i
            break
 
    # Find last occurrence
    # of 1 in s[]
    last = 0
 
    for i in range(Len - 1,
                   -1, -1):
        if(s[i] == '1'):
            last = i
            break
 
    # Check if there is any
    # 0 in range
    for i in range(first,
                   last + 1):
        if(s[i] == '0'):
            return False
    return True
 
# Driver code
s = "00011111111100000"
if(checkString(s)):
    print("VALID")
else:
    print("NOT VALID")
 
# This code is contributed by avanitrachhadiya2155


C#
// C# program to check if a
// string is valid or not.
using System;
 
class GFG {
     
    // Method returns 1 when string is valid
    // else returns 0
    static bool checkString(String s)
    {
        int len = s.Length;
 
        // Find first occurrence of 1 in s[]
        int first = 0;
        for (int i = 0; i < len; i++) {
            if (s[i] == '1') {
                first = i;
                break;
            }
        }
 
        // Find last occurrence of 1 in s[]
        int last = 0;
        for (int i = len - 1; i >= 0; i--) {
            if (s[i] == '1') {
                last = i;
                break;
            }
        }
 
        // Check if there is any 0 in range
        for (int i = first; i <= last; i++)
            if (s[i] == '0')
                return false;
 
        return true;
    }
 
    // Driver method
    public static void Main()
    {
        string s = "00011111111100000";
        Console.WriteLine(checkString(s) ?
                   "VALID" : "NOT VALID");
    }
}
 
// This code is contributed by Sam007


Javascript


输出:

VALID

时间复杂度: O(n)