 Open in App
Not now

# Number of common base strings for two strings

• Difficulty Level : Medium
• Last Updated : 27 Nov, 2022

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
Related Articles