Given three strings str, A and B. The task is to check whether str = A + B or str = B + A where + denotes concatenation.
Examples:
Input: str = “neveropen”, A = “Geeksfo”, B = “rGeeks”
Output: Yes
str = A + B = “Geeksfo” + “rGeeks” = “neveropen”
Input: str = “Delhicapitals”, B = “Delmi”, C = “capitals”
Output: No
Approach:
- If len(str) != len(A) + len(B) then it is not possible to generate str by concatenating a + b or b + a.
- Else check whether str starts with a and ends with b or it starts with b and ends with a. Print Yes if any of these is true else print No
Below is the implementation of the above approach:
C++
// C++ implementation of the approach#include <bits/stdc++.h>using namespace std;// Function that return true// if pre is a prefix of strbool startsWith(string str, string pre){ int strLen = str.length(); int preLen = pre.length(); int i = 0, j = 0; // While there are characters to match while (i < strLen && j < preLen) { // If characters differ at any position if (str[i] != pre[j]) return false; i++; j++; } // str starts with pre return true;}// Function that return true// if suff is a suffix of strbool endsWith(string str, string suff){ int i = str.length() - 0; int j = suff.length() - 0; // While there are characters to match while (i >= 0 && j >= 0) { // If characters differ at any position if (str[i] != suff[j]) return false; i--; j--; } // str ends with suff return true;}// Function that returns true// if str = a + b or str = b + abool checkString(string str, string a, string b){ // str cannot be generated // by concatenating a and b if (str.length() != a.length() + b.length()) return false; // If str starts with a // i.e. a is a prefix of str if (startsWith(str, a)) { // Check if the rest of the characters // are equal to b i.e. b is a suffix of str if (endsWith(str, b)) return true; } // If str starts with b // i.e. b is a prefix of str if (startsWith(str, b)) { // Check if the rest of the characters // are equal to a i.e. a is a suffix of str if (endsWith(str, a)) return true; } return false;}// Driver codeint main(){ string str = "neveropen"; string a = "Geeksfo"; string b = "rGeeks"; if (checkString(str, a, b)) cout << "Yes"; else cout << "No"; return 0;} |
Java
// Java implementation of the approachimport java.util.*;class GFG{ // Function that return true// if pre is a prefix of strstatic boolean startsWith(String str, String pre){ int strLen = str.length(); int preLen = pre.length(); int i = 0, j = 0; // While there are characters to match while (i < strLen && j < preLen) { // If characters differ at any position if (str.charAt(i) != pre.charAt(j)) return false; i++; j++; } // str starts with pre return true;}// Function that return true// if suff is a suffix of strstatic boolean endsWith(String str, String suff){ int i = str.length() - 1; int j = suff.length() - 1; // While there are characters to match while (i >= 0 && j >= 0) { // If characters differ at any position if (str.charAt(i) != suff.charAt(j)) return false; i--; j--; } // str ends with suff return true;}// Function that returns true// if str = a + b or str = b + astatic boolean checkString(String str, String a, String b){ // str cannot be generated // by concatenating a and b if (str.length() != a.length() + b.length()) return false; // If str starts with a // i.e. a is a prefix of str if (startsWith(str, a)) { // Check if the rest of the characters // are equal to b i.e. b is a suffix of str if (endsWith(str, b)) return true; } // If str starts with b // i.e. b is a prefix of str if (startsWith(str, b)) { // Check if the rest of the characters // are equal to a i.e. a is a suffix of str if (endsWith(str, a)) return true; } return false;}// Driver codepublic static void main(String args[]){ String str = "neveropen"; String a = "Geeksfo"; String b = "rGeeks"; if (checkString(str, a, b)) System.out.println("Yes"); else System.out.println("No");}}// This code is contributed by Arnab Kundu |
Python3
# Python3 implementation of the approach # Function that return true # if pre is a prefix of str def startsWith(str, pre): strLen = len(str) preLen = len(pre) i = 0 j = 0 # While there are characters to match while (i < strLen and j < preLen): # If characters differ at any position if (str[i] != pre[j]) : return False i += 1 j += 1 # str starts with pre return True # Function that return true # if suff is a suffix of str def endsWith(str, suff): i = len(str) - 1 j = len(suff) - 1 # While there are characters to match while (i >= 0 and j >= 0): # If characters differ at any position if (str[i] != suff[j]): return False i -= 1 j -= 1 # str ends with suff return True# Function that returns true # if str = a + b or str = b + a def checkString(str, a, b): # str cannot be generated # by concatenating a and b if (len(str) != len(a) + len(b)): return False # If str starts with a # i.e. a is a prefix of str if (startsWith(str, a)): # Check if the rest of the characters # are equal to b i.e. b is a suffix of str if (endsWith(str, b)): return True # If str starts with b # i.e. b is a prefix of str if (startsWith(str, b)): # Check if the rest of the characters # are equal to a i.e. a is a suffix of str if (endsWith(str, a)): return True return False # Driver code str = "neveropen"a = "Geeksfo"b = "rGeeks"if (checkString(str, a, b)): print("Yes")else: print("No")# This code is contributed by SHUBHAMSINGH10 |
C#
// C# implementation of the approachusing System;class GFG{ // Function that return true// if pre is a prefix of strstatic Boolean startsWith(String str, String pre){ int strLen = str.Length; int preLen = pre.Length; int i = 0, j = 0; // While there are characters to match while (i < strLen && j < preLen) { // If characters differ at any position if (str[i] != pre[j]) return false; i++; j++; } // str starts with pre return true;}// Function that return true// if suff is a suffix of strstatic Boolean endsWith(String str, String suff){ int i = str.Length - 1; int j = suff.Length - 1; // While there are characters to match while (i >= 0 && j >= 0) { // If characters differ at any position if (str[i] != suff[j]) return false; i--; j--; } // str ends with suff return true;}// Function that returns true// if str = a + b or str = b + astatic Boolean checkString(String str, String a, String b){ // str cannot be generated // by concatenating a and b if (str.Length != a.Length + b.Length) return false; // If str starts with a // i.e. a is a prefix of str if (startsWith(str, a)) { // Check if the rest of the characters // are equal to b i.e. b is a suffix of str if (endsWith(str, b)) return true; } // If str starts with b // i.e. b is a prefix of str if (startsWith(str, b)) { // Check if the rest of the characters // are equal to a i.e. a is a suffix of str if (endsWith(str, a)) return true; } return false;}// Driver codepublic static void Main(String []args){ String str = "neveropen"; String a = "Geeksfo"; String b = "rGeeks"; if (checkString(str, a, b)) Console.WriteLine("Yes"); else Console.WriteLine("No");}}// This code is contributed by 29AjayKumar |
PHP
<?php// PHP implementation of the approach // Function that return true // if pre is a prefix of str function startsWith($str, $pre) { $strLen = strlen($str); $preLen = strlen($pre); $i = 0; $j = 0; // While there are characters to match while ($i < $strLen && $j < $preLen) { // If characters differ at any position if ($str[$i] != $pre[$j]) return false; $i++; $j++; } // str starts with pre return true; } // Function that return true // if suff is a suffix of str function endsWith($str, $suff) { $i = strlen($str)- 0; $j = strlen($suff)- 0; // While there are characters to match while ($i >= 0 && $j >= 0) { // If characters differ at any position if ($str[$i] != $suff[$j]) return false; $i--; $j--; } // str ends with suff return true; } // Function that returns true // if str = a + b or str = b + a function checkString($str, $a, $b) { // str cannot be generated // by concatenating a and b if (strlen($str) != strlen($a) + strlen($b)) return false; // If str starts with a // i.e. a is a prefix of str if (startsWith($str, $a)) { // Check if the rest of the characters // are equal to b i.e. b is a suffix of str if (endsWith($str, $b)) return true; } // If str starts with b // i.e. b is a prefix of str if (startsWith($str, $b)) { // Check if the rest of the characters // are equal to a i.e. a is a suffix of str if (endsWith($str, $a)) return true; } return false; } // Driver code $str = "neveropen"; $a = "Geeksfo"; $b = "rGeeks"; if (checkString($str, $a, $b)) echo "Yes"; else echo "No"; // This code is contributed by AnkitRai01?> |
Javascript
<script> // JavaScript implementation of the approach // Function that return true // if pre is a prefix of str function startsWith(str, pre) { let strLen = str.length; let preLen = pre.length; let i = 0, j = 0; // While there are characters to match while (i < strLen && j < preLen) { // If characters differ at any position if (str[i] != pre[j]) return false; i++; j++; } // str starts with pre return true; } // Function that return true // if suff is a suffix of str function endsWith(str, suff) { let i = str.length - 1; let j = suff.length - 1; // While there are characters to match while (i >= 0 && j >= 0) { // If characters differ at any position if (str[i] != suff[j]) return false; i--; j--; } // str ends with suff return true; } // Function that returns true // if str = a + b or str = b + a function checkString(str, a, b) { // str cannot be generated // by concatenating a and b if (str.length != a.length + b.length) return false; // If str starts with a // i.e. a is a prefix of str if (startsWith(str, a)) { // Check if the rest of the characters // are equal to b i.e. b is a suffix of str if (endsWith(str, b)) return true; } // If str starts with b // i.e. b is a prefix of str if (startsWith(str, b)) { // Check if the rest of the characters // are equal to a i.e. a is a suffix of str if (endsWith(str, a)) return true; } return false; } let str = "neveropen"; let a = "Geeksfo"; let b = "rGeeks"; if (checkString(str, a, b)) document.write("Yes"); else document.write("No"); </script> |
Yes
Time Complexity: O(max(a,b,c)), as we are using a loop to traverse a, b, and c times. Where a, b, and c are the length of the strings.
Auxiliary Space: O(1), as we are not using any extra space.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
