# Check whether str1 can be converted to str2 with the given operations

Given two binary strings str1 and str2. The task is to check whether it is possible to convert str1 to str2 by applying the below operation an arbitrary number of times on str1.
In each operation, one can combine two consecutive 0’s into a single 1.

Examples:

Input: str1 = “00100”, str2 = “111”
Output: Yes
Combine first two zeros to one and combine last two zeros to one.

Input: str1 = “00”, str2 = “000”
Output: No
It is not possible to convert str1 to str2.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: Let’s process str1 and str2 character by character from left to right in parallel. Let’s use two indices i and j: the index i is for str1 and the index j is for str2. Now, there are two cases:

1. If str1[i] = str2[j] then increment both i and j.
2. If str1[i] != str2[j] then,
• If there are two consecutive 0’s in str1 i.e. str1[i] = 0 and str1[i + 1] = 0 and str2[j] = 1 which means both the zeroes can be combined to match with the 1 in str2. So, increment i by 2 and j by 1.
• Else str1 cannot be converted to str2.
3. If in the end both i and j are at the end of their respective strings i.e. str1 and str2 then the answer is Yes else the answer is No.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function that returns true if str1 can be ` `// converted to str2 with the given operations ` `bool` `canConvert(string str1, string str2) ` `{ ` `    ``int` `i = 0, j = 0; ` ` `  `    ``// Traverse from left to right ` `    ``while` `(i < str1.size() && j < str2.size()) { ` ` `  `        ``// If the two characters do not match ` `        ``if` `(str1[i] != str2[j]) { ` ` `  `            ``// If possible to combine ` `            ``if` `(str1[i] == ``'0'` `&& str2[j] == ``'1'` `                ``&& i + 1 < str1.size() ` `                ``&& str1[i + 1] == ``'0'``) { ` `                ``i += 2; ` `                ``j++; ` `            ``} ` ` `  `            ``// If not possible to combine ` `            ``else` `{ ` `                ``return` `false``; ` `            ``} ` `        ``} ` ` `  `        ``// If the two characters match ` `        ``else` `{ ` `            ``i++; ` `            ``j++; ` `        ``} ` `    ``} ` ` `  `    ``// If possible to convert one string to another ` `    ``if` `(i == str1.size() && j == str2.size()) ` `        ``return` `true``; ` `    ``return` `false``; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``string str1 = ``"00100"``, str2 = ``"111"``; ` ` `  `    ``if` `(canConvert(str1, str2)) ` `        ``cout << ``"Yes"``; ` `    ``else` `        ``cout << ``"No"``; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the approach ` `class` `GFG ` `{ ` ` `  `    ``// Function that returns true if str1 can be ` `    ``// converted to str2 with the given operations ` `    ``static` `boolean` `canConvert(String str1, String str2) ` `    ``{ ` `        ``int` `i = ``0``, j = ``0``; ` ` `  `        ``// Traverse from left to right ` `        ``while` `(i < str1.length() && j < str2.length())  ` `        ``{ ` ` `  `            ``// If the two characters do not match ` `            ``if` `(str1.charAt(i) != str2.charAt(j)) ` `            ``{ ` ` `  `                ``// If possible to combine ` `                ``if` `(str1.charAt(i) == ``'0'` `&& str2.charAt(j) == ``'1'` `                    ``&& i + ``1` `< str1.length() && str1.charAt(i+``1``) == ``'0'``)  ` `                ``{ ` `                    ``i += ``2``; ` `                    ``j++; ` `                ``} ` ` `  `                ``// If not possible to combine ` `                ``else`  `                ``{ ` `                    ``return` `false``; ` `                ``} ` `            ``} ` ` `  `            ``// If the two characters match ` `            ``else` `            ``{ ` `                ``i++; ` `                ``j++; ` `            ``} ` `        ``} ` ` `  `        ``// If possible to convert one string to another ` `        ``if` `(i == str1.length() && j == str2.length()) ` `            ``return` `true``; ` `        ``return` `false``; ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args)  ` `    ``{ ` ` `  `        ``String str1 = ``"00100"``, str2 = ``"111"``; ` ` `  `        ``if` `(canConvert(str1, str2)) ` `            ``System.out.println(``"Yes"``); ` `        ``else` `            ``System.out.println(``"No"``); ` `    ``} ` `} ` ` `  `// This code contributed by Rajput-Ji `

## Python3

 `# Python implementation of the approach ` ` `  `# Function that returns true if str1 can be ` `# converted to str2 with the given operations ` `def` `canConvert(str1, str2): ` `    ``i, j ``=` `0``, ``0``; ` ` `  `    ``# Traverse from left to right ` `    ``while` `(i < ``len``(str1) ``and` `j < ``len``(str2)): ` ` `  `        ``# If the two characters do not match ` `        ``if` `(str1[i] !``=` `str2[j]): ` ` `  `            ``# If possible to combine ` `            ``if` `(str1[i] ``=``=` `'0'` `and` `str2[j] ``=``=` `'1'` `                ``and` `i ``+` `1` `< ``len``(str1) ` `                ``and` `str1[i ``+` `1``] ``=``=` `'0'``): ` `                ``i ``+``=` `2``; ` `                ``j``+``=``1``; ` ` `  `            ``# If not possible to combine ` `            ``else``: ` `                ``return` `False``; ` `        ``# If the two characters match ` `        ``else``: ` `            ``i ``+``=` `1``; ` `            ``j ``+``=` `1``; ` `             `  `    ``# If possible to convert one string to another ` `    ``if` `(i ``=``=` `len``(str1) ``and` `j ``=``=` `len``(str2)): ` `        ``return` `True``; ` `    ``return` `False``; ` ` `  `# Driver code ` `str1 ``=` `"00100"``; ` `str2 ``=` `"111"``; ` ` `  `if` `(canConvert(str1, str2)): ` `    ``print``(``"Yes"``); ` `else``: ` `    ``print``(``"No"``); ` ` `  `# This code is contributed by 29AjayKumar `

## C#

 `// C# implementation of the approach  ` `using` `System; ` ` `  `class` `GFG  ` `{  ` ` `  `    ``// Function that returns true if str1 can be  ` `    ``// converted to str2 with the given operations  ` `    ``static` `bool` `canConvert(``string` `str1, ``string` `str2)  ` `    ``{  ` `        ``int` `i = 0, j = 0;  ` ` `  `        ``// Traverse from left to right  ` `        ``while` `(i < str1.Length && j < str2.Length)  ` `        ``{  ` ` `  `            ``// If the two characters do not match  ` `            ``if` `(str1[i] != str2[j])  ` `            ``{  ` ` `  `                ``// If possible to combine  ` `                ``if` `(str1[i] == ``'0'` `&& str2[j] == ``'1'` `                    ``&& i + 1 < str1.Length && str1[i+1] == ``'0'``)  ` `                ``{  ` `                    ``i += 2;  ` `                    ``j++;  ` `                ``}  ` ` `  `                ``// If not possible to combine  ` `                ``else` `                ``{  ` `                    ``return` `false``;  ` `                ``}  ` `            ``}  ` ` `  `            ``// If the two characters match  ` `            ``else` `            ``{  ` `                ``i++;  ` `                ``j++;  ` `            ``}  ` `        ``}  ` ` `  `        ``// If possible to convert one string to another  ` `        ``if` `(i == str1.Length && j == str2.Length)  ` `            ``return` `true``;  ` `        ``return` `false``;  ` `    ``}  ` ` `  `    ``// Driver code  ` `    ``public` `static` `void` `Main()  ` `    ``{  ` ` `  `        ``string` `str1 = ``"00100"``, str2 = ``"111"``;  ` ` `  `        ``if` `(canConvert(str1, str2))  ` `            ``Console.WriteLine(``"Yes"``);  ` `        ``else` `            ``Console.WriteLine(``"No"``);  ` `    ``}  ` `}  ` ` `  `// This code is contributed by AnkitRai01 `

Output:

```Yes
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.