Check whether given string can be generated after concatenating given strings
Last Updated :
12 Oct, 2022
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:
- 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 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>
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.
Similar Reads
Check if String can be generated by concatenating character or String itself Given a target string S consisting of lowercase alphabets, the task is to make this string by performing some operation on an empty string such that: The first operation is to append a lower case alphabet to string S and The second operation is to append a copy of S to itself. Note: The first operat
6 min read
Check whether a binary string can be formed by concatenating given N numbers sequentially Given a sequence of 'n' numbers (without leading zeros), the task is to find whether it is possible to create a binary string by concatenating these numbers sequentially. If possible, then print the binary string formed, otherwise print "-1". Examples : Input: arr[] = {10, 11, 1, 0, 10} Output: 1011
8 min read
Generate a string whose all K-size substrings can be concatenated to form the given string Given a string str of size N and an integer K, the task is to generate a string whose substrings of size K can be concatenated to form the given string. Examples: Input: str = "abbaaa" K = 2 Output: abaa Explanation: All substring of size 2 of parent string "abaa" are "ab", "ba" and "aa". After conc
5 min read
Find smallest string with whose characters all given Strings can be generated Given an array of strings arr[]. The task is to generate the string which contains all the characters of all the strings present in array and smallest in size. There can be many such possible strings and any one is acceptable. Examples: Input: arr[] = {"your", "you", "or", "yo"}Output: ruyoExplanati
5 min read
Check if a Regular Bracket Sequence can be formed with concatenation of given strings Given an array arr[] consisting of N strings where each string consists of '(' and ')', the task is to check if a Regular Bracket Sequence can be formed with the concatenation of the given strings or not. If found to be true, then print Yes. Otherwise print No. Examples: Input: arr[] = { ")", "()("
11 min read