Check if a string is concatenation of another given string

Given two strings str1 and str2 of length N and M respectively, the task is to check if the string str1 can be formed by concatenating the string str2 repetitively or not.

Examples:

Input: str1 = “abcabcabc”, str2 = “abc”
Output: Yes
Explanation: 
Concatenating the string str2 thrice generates the string (“abc” + “abc” + “abc” = ) “abcabcabc”.
Therefore, the required output is Yes.

Input: str1 = “abcabcab”, str2 = “abc”
Output: No

Approach: Follow the steps below to solve the problem:



  • Traverse the strings str1 and str2.
  • For each character of str1 and str2, check if str1[i] == str2[i % M] or not.
  • If found to be false for any character, print “No”.
  • Otherwise, print “Yes”.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to implement
// the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if a string is
// concatenation of another string
bool checkConcat(string str1,
                 string str2)
{
 
    // Stores the length of str2
    int N = str1.length();
 
    // Stores the length of str1
    int M = str2.length();
 
    // If M is not multiple of N
    if (N % M != 0) {
        return false;
    }
 
    // Traverse both the strings
    for (int i = 0; i < N; i++) {
 
        // If str1 is not concatenation
        // of str2
        if (str1[i] != str2[i % M]) {
            return false;
        }
    }
    return true;
}
 
// Driver Code
int main()
{
    string str1 = "abcabcabc";
    string str2 = "abc";
 
    if (checkConcat(str1, str2)) {
        cout << "Yes";
    }
    else {
        cout << "No";
    }
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to implement
// the above approach
import java.util.*;
 
class GFG{
 
// Function to check if a String is
// concatenation of another String
static boolean checkConcat(String str1,
                           String str2)
{
     
    // Stores the length of str2
    int N = str1.length();
 
    // Stores the length of str1
    int M = str2.length();
 
    // If M is not multiple of N
    if (N % M != 0)
    {
        return false;
    }
 
    // Traverse both the Strings
    for(int i = 0; i < N; i++)
    {
         
        // If str1 is not concatenation
        // of str2
        if (str1.charAt(i) !=
            str2.charAt(i % M))
        {
            return false;
        }
    }
    return true;
}
 
// Driver Code
public static void main(String[] args)
{
    String str1 = "abcabcabc";
    String str2 = "abc";
 
    if (checkConcat(str1, str2))
    {
        System.out.print("Yes");
    }
    else
    {
        System.out.print("No");
    }
}
}
 
// This code is contributed by Amit Katiyar

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to implement
# the above approach
 
# Function to check if a is
# concatenation of another string
def checkConcat(str1, str2):
 
    # Stores the length of str2
    N = len(str1)
 
    # Stores the length of str1
    M = len(str2)
 
    # If M is not multiple of N
    if (N % M != 0):
        return False
 
    # Traverse both the strings
    for i in range(N):
 
        # If str1 is not concatenation
        # of str2
        if (str1[i] != str2[i % M]):
            return False
             
    return True
 
# Driver Code
if __name__ == '__main__':
     
    str1 = "abcabcabc"
    str2 = "abc"
 
    if (checkConcat(str1, str2)):
        print("Yes")
    else:
        print("No")
 
# This code is contributed by mohit kumar 29

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to implement
// the above approach
using System;
class GFG{
 
// Function to check if a String is
// concatenation of another String
static bool checkConcat(String str1,
                        String str2)
{
  // Stores the length
  // of str2
  int N = str1.Length;
 
  // Stores the length
  // of str1
  int M = str2.Length;
 
  // If M is not multiple
  // of N
  if (N % M != 0)
  {
    return false;
  }
 
  // Traverse both the Strings
  for(int i = 0; i < N; i++)
  {
    // If str1 is not
    // concatenation of str2
    if (str1[i] !=
        str2[i % M])
    {
      return false;
    }
  }
  return true;
}
 
// Driver Code
public static void Main(String[] args)
{
  String str1 = "abcabcabc";
  String str2 = "abc";
 
  if (checkConcat(str1, str2))
  {
    Console.Write("Yes");
  }
  else
  {
    Console.Write("No");
  }
}
}
 
// This code is contributed by 29AjayKumar

chevron_right


Output

Yes

Time Complexity: O(N) 
Auxiliary Space: O(1) 

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 Posts:


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.