Check whether given string can be generated after concatenating given strings

Last Updated : 12 Oct, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

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) 
    { 

        // 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 = "GeeksforGeeks"; 
$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 = "GeeksforGeeks";
    let a = "Geeksfo";
    let b = "rGeeks";
  
    if (checkString(str, a, b))
        document.write("Yes");
    else
        document.write("No");
    
</script>

Output: 
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.


Next Article
Article Tags :
Practice Tags :

Similar Reads