# Count pair of strings whose concatenation of substrings form a palindrome

Last Updated : 09 Jun, 2022

Given an array of strings arr[], the task is to count the pair of strings whose concatenation of substrings form a palindrome.
Examples:

Input: arr[] = {“gfg”, “gfg”}
Output:
Explanation:
One possible way of choosing s1 and s2 is s1 = “gf”, s2 = “g” such that s1 + s2 i.e “gfg” is a palindrome.
Input: arr[] = {“abc”, B = “def”}
Output:

Approach: The key observation in the problem is if both strings have at least one common character let’s say ‘c’ then we can form a palindromic string. Therefore, check for all the pairs in the array that there is a common character in the string or not.
Below is the implementation of the above approach:

## C++

 `// C++ implementation to count of ` `// palindromic Palindromic Substrings` `// that can be formed from the array`   `#include ` `using` `namespace` `std; `   `// Function to to check if possible` `// to make palindromic substring` `bool` `isPossible(string A, string B) ` `{ `   `        ``sort(B.begin(),B.end());` `        ``int` `c=0;` `        ``for``(``int` `i = 0; i < (``int``)A.size(); i++)` `            ``if``(binary_search(B.begin(),B.end(),A[i]))` `                ``return` `true``;` `    ``return` `false``;` `} `   `// Function to count of Palindromic Substrings` `// that can be formed from the array.` `int` `countPalindromicSubstrings(string s[], ``int` `n)` `{` `    ``// variable to store count` `    ``int` `count = 0;`   `    ``// Traverse through all the pairs` `    ``// in the array` `    ``for``(``int` `i = 0; i < n; i++){` `        ``for``(``int` `j = i + 1; j < n; j++)` `            ``if``(isPossible(s[i], s[j]))` `                ``count++;` `    ``}` `    ``return` `count;` `}`   `// Driver Code ` `int` `main() ` `{ ` `    ``string arr[] = { ``"gfg"``, ``"gfg"` `}; ` `    ``int` `n = 2;` `    ``cout << countPalindromicSubstrings(arr, n);` `    ``return` `0; ` `} `

## Java

 `// Java implementation to count of ` `// palindromic Palindromic SubStrings` `// that can be formed from the array` `import` `java.util.*;`   `class` `GFG{ `   `// Function to to check if possible` `// to make palindromic subString` `static` `boolean` `isPossible(String A, String B) ` `{ ` `    ``B = sortString(B);` `    `  `    ``for``(``int` `i = ``0``; i < (``int``)A.length(); i++)` `        ``if``(Arrays.binarySearch(B.toCharArray(), ` `                               ``A.charAt(i)) > -``1``)` `           ``return` `true``;` `            `  `    ``return` `false``;` `} `   `// Function to count of Palindromic SubStrings` `// that can be formed from the array.` `static` `int` `countPalindromicSubStrings(String s[],` `                                      ``int` `n)` `{` `    `  `    ``// Variable to store count` `    ``int` `count = ``0``;`   `    ``// Traverse through all the pairs` `    ``// in the array` `    ``for``(``int` `i = ``0``; i < n; i++)` `    ``{` `        ``for``(``int` `j = i + ``1``; j < n; j++)` `            ``if``(isPossible(s[i], s[j]))` `                ``count++;` `    ``}` `    ``return` `count;` `}`   `static` `String sortString(String inputString) ` `{ ` `    `  `    ``// Convert input string to char array ` `    ``char` `tempArray[] = inputString.toCharArray(); ` `        `  `    ``// Sort tempArray ` `    ``Arrays.sort(tempArray); ` `        `  `    ``// Return new sorted string ` `    ``return` `new` `String(tempArray); ` `} `   `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``String arr[] = { ``"gfg"``, ``"gfg"` `}; ` `    ``int` `n = ``2``;` `    `  `    ``System.out.print(countPalindromicSubStrings(arr, n));` `} ` `} `   `// This code is contributed by Rajput-Ji`

## Python3

 `# Python3 implementation to count of ` `# palindromic Palindromic Substrings` `# that can be formed from the array`   `# Function to to check if possible` `# to make palindromic substring` `def` `isPossible(A, B):` `  `  `    ``B ``=` `sorted``(B)` `    ``c ``=` `0` `    `  `    ``for` `i ``in` `range``(``len``(A)):` `        ``if` `A[i] ``in` `B:` `            ``return` `True` `    ``return` `False`   `# Function to count of Palindromic ` `# Substrings that can be formed ` `# from the array.` `def` `countPalindromicSubstrings(s, n):`   `    ``# Variable to store count` `    ``count ``=` `0`   `    ``# Traverse through all ` `    ``# Substrings in the array` `    ``for` `i ``in` `range``(n):` `        ``for` `j ``in` `range``(i ``+` `1``, n):` `            ``if``(isPossible(s[i], s[j])):` `                ``count ``+``=` `1` `    ``return` `count`   `# Driver Code ` `arr ``=` `[``"gfg"``, ``"gfg"``]` `n ``=` `2` `print``(countPalindromicSubstrings(arr, n))`   `# This code is contributed by avanitrachhadiya2155`

## C#

 `// C# implementation to count of ` `// palindromic Palindromic SubStrings` `// that can be formed from the array` `using` `System;` `class` `GFG{ `   `// Function to to check if possible` `// to make palindromic subString` `static` `bool` `isPossible(String A, String B) ` `{ ` `    ``B = sortString(B);` `    `  `    ``for``(``int` `i = 0; i < (``int``)A.Length; i++)` `        ``if``(Array.BinarySearch(B.ToCharArray(), ` `                               ``A[i]) > -1)` `           ``return` `true``;` `            `  `    ``return` `false``;` `} `   `// Function to count of Palindromic SubStrings` `// that can be formed from the array.` `static` `int` `countPalindromicSubStrings(String []s,` `                                      ``int` `n)` `{` `    `  `    ``// Variable to store count` `    ``int` `count = 0;`   `    ``// Traverse through all the pairs` `    ``// in the array` `    ``for``(``int` `i = 0; i < n; i++)` `    ``{` `        ``for``(``int` `j = i + 1; j < n; j++)` `            ``if``(isPossible(s[i], s[j]))` `                ``count++;` `    ``}` `    ``return` `count;` `}`   `static` `String sortString(String inputString) ` `{ ` `    `  `    ``// Convert input string to char array ` `    ``char` `[]tempArray = inputString.ToCharArray(); ` `        `  `    ``// Sort tempArray ` `    ``Array.Sort(tempArray); ` `        `  `    ``// Return new sorted string ` `    ``return` `new` `String(tempArray); ` `} `   `// Driver Code ` `public` `static` `void` `Main(String[] args) ` `{ ` `    ``String []arr = { ``"gfg"``, ``"gfg"` `}; ` `    ``int` `n = 2;` `    `  `    ``Console.Write(countPalindromicSubStrings(arr, n));` `} ` `} `   `// This code is contributed by Rajput-Ji`

## Javascript

 ``

Output:

`1`

Time complexity: O(n2*mlogm) where m is length of string

Auxiliary Space: O(1)

Share your thoughts in the comments