 Open in App
Not now

# Check if a binary string has a 0 between 1s or not | Set 1 (General approach)

• Difficulty Level : Easy
• Last Updated : 24 Jan, 2023

Given a string of 0 and 1, we need to check that the given string is valid or not. The given string is valid when there is no zero is present in between 1’s. For example, 1111, 0000111110, 1111000 are valid strings but 01010011, 01010, 101 are not.

One approach to solving the problem is discussed here, other using Regular expressions is given Set 2

Examples:

```Input : 100
Output : VALID

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

Input : 00011
Output : VALID```
Recommended Practice

### Approach 1 : (Simple Traversal)

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 0and 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”.

Implementation:

## 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

 ``

Output

`VALID`

Time Complexity: O(n)

Auxiliary Space: O(1) since it is using constant space for variables

### Approach 2 : (Using Two Pointers)

Will keep two pointers on the both end of the string and will check whether in the both side ‘1’ is found (track the index with another variable) or not. If in the both sides we find ‘1’ then will run another loop for the inner part using the other two variables, which will again be a part of two pointers algorithm.

Look at the code for better understanding,

## 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)``{``    ``// two pointers i and j will point``    ``// to both end of the string``    ``int` `i = 0, j = s.size() - 1;` `    ``// si and ei the other two variables``    ``int` `si = -1, ei = -1;` `    ``while` `(i <= j) {``        ``// if 1 is found in the left part``        ``// for the first time``        ``if` `(si == -1 and s[i] == ``'1'``)``            ``si = i;` `        ``// if 1 is found in the right part``        ``// for the first time``        ``if` `(ei == -1 and s[j] == ``'1'``)``            ``ei = j;` `        ``// if 1 is found in both side``        ``if` `(si != -1 and ei != -1) {``            ``// use the other two pointers``            ``// to check if there is zero``            ``while` `(si <= ei) {``                ``// if in any side 0 is found``                ``// return false``                ``if` `(s[si] == ``'0'` `or s[ei] == ``'0'``)``                    ``return` `false``;` `                ``si++;``                ``ei--;``            ``}` `            ``// if not found``            ``// return true``            ``return` `true``;``        ``}` `        ``// update the initial pointers``        ``i++;``        ``j--;``    ``}` `    ``// if it is not invalid``    ``// return true``    ``return` `true``;``}` `// Driver code``int` `main()``{``    ``string s = ``"00011111111100000"``;``    ``checkString(s) ? cout << ``"VALID\n"``                   ``: cout << ``"NOT VALID\n"``;``    ``return` `0;``}` `// This code is contributed by Rajdeep Mallick(rajdeep999)`

Output

`VALID`

Time Complexity : O(N)
Auxiliary Space : O(1), since it is using constant space for variables.

This article is contributed by Sahil Rajput. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up