 GeeksforGeeks App
Open App Browser
Continue

# Number of common base strings for two strings

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 ``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

 ``

## Javascript

 ``

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.

My Personal Notes arrow_drop_up