Open In App

Number of common base strings for two strings

Last Updated : 27 Nov, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

Given two strings s1 and s2, we need to find number of common base strings of two. A substring of a string s is called base string if repeated concatenation of the substring results in s.

Examples:  

Input : s1 = "pqrspqrs"
        s2 = "pqrspqrspqrspqrs"
Output : 2
The two common base strings are "pqrs"
and "pqrspqrs".

Input: s1 = "bbb"
       s2 = "bb"
Output: 1
There is only one common base string
which is "b". 

The maximum possible length of common base string is equal to length of smaller of two strings. So we run a loop that considers all prefixes of smaller string and for every prefix checks if it is a common base.

Below is the implementation of the following approach  

C++
// CPP program to count common base strings
// of s1 and s2.
#include <bits/stdc++.h>
using namespace std;

// function for finding common divisor .
bool isCommonBase(string base, string s1,  
                               string s2)
{
    // Checking if 'base' is base string  
    // of 's1'
    for (int j = 0; j < s1.length(); ++j) 
        if (base[j % base.length()] != s1[j])
            return false;
    
    // Checking if 'base' is base string 
    // of 's2'
    for (int j = 0; j < s2.length(); ++j) 
        if (base[j % base.length()] != s2[j])
            return false;    

    return true;
}

int countCommonBases(string s1, string s2) {
   int n1 = s1.length(), n2 = s2.length();
   int count = 0;
   for (int i=1; i<=min(n1, n2); i++)
   {
       string base = s1.substr(0, i);
       if (isCommonBase(base, s1, s2))
           count++;
   }
   return count;
}

// Driver code
int main()
{
    string s1 = "pqrspqrs";
    string s2 = "pqrspqrspqrspqrs";
    cout << countCommonBases(s1, s2) << endl;
    return 0;
}
Java
// Java program to count common
// base strings of s1 and s2. 

class GFG 
{

// function for finding common divisor 
static boolean isCommonBase(String base, 
                            String s1, 
                            String s2)
{
    // Checking if 'base' is base 
    // String of 's1' 
    for (int j = 0; j < s1.length(); ++j) 
    {
        if (base.charAt(j % 
            base.length()) != s1.charAt(j))
        {
            return false;
        }
    }

    // Checking if 'base' is base 
    // String of 's2' 
    for (int j = 0; j < s2.length(); ++j) 
    {
        if (base.charAt(j % 
            base.length()) != s2.charAt(j)) 
        {
            return false;
        }
    }

    return true;
}

static int countCommonBases(String s1, 
                            String s2) 
{
    int n1 = s1.length(), 
        n2 = s2.length();
    int count = 0;
    for (int i = 1; i <= Math.min(n1, n2); i++) 
    {
        String base = s1.substring(0, i);
        if (isCommonBase(base, s1, s2)) 
        {
            count++;
        }
    }
    return count;
}

// Driver code 
public static void main(String[] args)
{
    String s1 = "pqrspqrs";
    String s2 = "pqrspqrspqrspqrs";

    System.out.println(countCommonBases(s1, s2));
}
}

// This code is contributed by Rajput-JI 
Python 3
# Python 3 program to count common 
# base strings of s1 and s2.

# function for finding common divisor .
def isCommonBase(base, s1, s2):

    # Checking if 'base' is base 
    # string of 's1'
    for j in range(len(s1)): 
        if (base[j % len(base)] != s1[j]):
            return False
    
    # Checking if 'base' is base 
    # string of 's2'
    for j in range(len(s2)): 
        if (base[j % len( base)] != s2[j]):
            return False

    return True

def countCommonBases(s1, s2): 
    n1 = len(s1)
    n2 = len(s2)
    count = 0
    for i in range(1, min(n1, n2) + 1):
        base = s1[0: i]
        if (isCommonBase(base, s1, s2)):
            count += 1
        
    return count

# Driver code
if __name__ == "__main__":
    
    s1 = "pqrspqrs"
    s2 = "pqrspqrspqrspqrs"
    print(countCommonBases(s1, s2))

# This code is contributed by ita_c
C#
// C# program to count common base 
// strings of s1 and s2.
using System;

class GFG
{ 
// function for finding common divisor 
static bool isCommonBase(String Base, 
                         String s1, 
                         String s2) 
{
    // Checking if 'base' is base 
    // String of 's1' 
    for (int j = 0; j < s1.Length; ++j) 
    {
        if (Base[j % Base.Length] != s1[j]) 
        {
            return false;
        }
    }

    // Checking if 'base' is base 
    // String of 's2' 
    for (int j = 0; j < s2.Length; ++j)
    {
        if (Base[j % Base.Length] != s2[j]) 
        {
            return false;
        }
    }

    return true;
}

static int countCommonBases(String s1, 
                            String s2)
{
    int n1 = s1.Length, n2 = s2.Length;
    int count = 0;
    for (int i = 1; 
             i <= Math.Min(n1, n2); i++)
    {
        String Base = s1.Substring(0, i);
        if (isCommonBase(Base, s1, s2)) 
        {
            count++;
        }
    }
    return count;
}

// Driver code 
public static void Main() 
{
    String s1 = "pqrspqrs";
    String s2 = "pqrspqrspqrspqrs";

    Console.Write(countCommonBases(s1, s2));
}
}

// This code is contributed by Rajput-JI 
PHP
<?php
// PHP program to count common base strings
// of s1 and s2.

// function for finding common divisor .
function isCommonBase($base,$s1, $s2)
{
    // Checking if 'base' is base string 
    // of 's1'
    for ($j = 0; $j < strlen($s1); ++$j) 
        if ($base[$j % strlen($base)] != $s1[$j])
            return false;
    
    // Checking if 'base' is base string 
    // of 's2'
    for ($j = 0; $j < strlen($s2); ++$j) 
        if ($base[$j % strlen($base)] != $s2[$j])
            return false; 

    return true;
}

function countCommonBases($s1, $s2) 
{
    $n1 = strlen($s1);
    $n2 = strlen($s2);
    $count = 0;
    for ($i = 1; $i <= min($n1, $n2); $i++)
    {
        $base = substr($s1,0, $i);
        if (isCommonBase($base, $s1, $s2))
            $count++;
    }
    return $count;
}

// Driver code
    $s1 = "pqrspqrs";
    $s2 = "pqrspqrspqrspqrs";
    echo countCommonBases($s1, $s2)."\n";

// This code is contributed by mits
?>
JavaScript
<script>
// Javascript program to count common
// base strings of s1 and s2. 
    
    // function for finding common divisor 
    function isCommonBase(base,s1,s2)
    {
    
        // Checking if 'base' is base 
    // String of 's1' 
    for (let j = 0; j < s1.length; ++j) 
    {
        if (base[j % base.length] != s1[j])
        {
            return false;
        }
    }
  
    // Checking if 'base' is base 
    // String of 's2' 
    for (let j = 0; j < s2.length; ++j) 
    {
        if (base[j %base.length] != s2[j]) 
        {
            return false;
        }
    }
  
    return true;
    }
    
    function countCommonBases(s1,s2)
    {
        let n1 = s1.length, 
        n2 = s2.length;
    let count = 0;
    for (let i = 1; i <= Math.min(n1, n2); i++) 
    {
        let base = s1.substring(0, i);
        if (isCommonBase(base, s1, s2)) 
        {
            count++;
        }
    }
    return count;
    }
    
    // Driver code 
    let s1 = "pqrspqrs";
    let s2 = "pqrspqrspqrspqrs";
    document.write(countCommonBases(s1, s2));
            
    // This code is contributed by rag2127
</script>

Output
2

Time Complexity: O(min(n1, n2) * (n1 + n2))
Auxiliary Space: O(min(n1, n2)), where n1 and n2 are the lengths of the given strings.


Next Article
Article Tags :
Practice Tags :

Similar Reads