Related Articles
Number of common base strings for two strings
• Difficulty Level : Medium
• Last Updated : 02 May, 2019

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

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

 ` `

Output:

```2
```

Time Complexity : O(min(n1, n2) * (n1 + n2))

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 Articles
Page :