Skip to content
Related Articles

Related Articles

Check whether given string can be generated after concatenating given strings
  • Last Updated : 10 Feb, 2020

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 = “GeeksforGeeks”, A = “Geeksfo”, B = “rGeeks”
Output: Yes
str = A + B = “Geeksfo” + “rGeeks” = “GeeksforGeeks”

Input: str = “Delhicapitals”, B = “Delmi”, C = “capitals”
Output: No

Approach:



  1. If len(str) != len(A) + len(B) then it is not possible to generate str by concatenating a + b or b + a.
  2. 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 str
bool 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 str
bool 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 + a
bool 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 code
int main()
{
    string str = "GeeksforGeeks";
    string a = "Geeksfo";
    string b = "rGeeks";
  
    if (checkString(str, a, b))
        cout << "Yes";
    else
        cout << "No";
  
    return 0;
}


Java




// Java implementation of the approach
import java.util.*;
  
class GFG
      
// Function that return true
// if pre is a prefix of str
static 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 str
static 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 + a
static 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 code
public static void main(String args[])
{
    String str = "GeeksforGeeks";
    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 = "GeeksforGeeks"
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 approach
using System;
  
class GFG
      
// Function that return true
// if pre is a prefix of str
static 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 str
static 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 + a
static 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 code
public static void Main(String []args)
{
    String str = "GeeksforGeeks";
    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) 
    
  
        // I$f 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 = "GeeksforGeeks"
$a = "Geeksfo"
$b = "rGeeks"
  
if (checkString($str, $a, $b)) 
    echo "Yes"
else
    echo "No"
  
// This code is contributed by AnkitRai01
?>


Output:

Yes

Time Complexity: O(N)

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
Recommended Articles
Page :