Java Program for Check if given string can be formed by two other strings or their permutations
Given a string str and an array of strings arr[], the task is to check if the given string can be formed by any of the string pair from the array or their permutations. Examples:
Input: str = “amazon”, arr[] = {“loa”, “azo”, “ft”, “amn”, “lka”} Output: Yes The chosen strings are “amn” and “azo” which can be rearranged as “amazon”. Input: str = “geeksforgeeks”, arr[] = {“geeks”, “geek”, “for”} Output: No
Java
import java.util.*;
class GFG
{
static boolean isPossible(Vector<String> v, String str)
{
str = sortString(str);
for ( int i = 0 ; i < v.size() - 1 ; i++)
{
for ( int j = i + 1 ; j < v.size(); j++)
{
String temp = v.get(i) + v.get(j);
temp = sortString(temp);
if (temp.compareTo(str) == 0 )
{
return true ;
}
}
}
return false ;
}
public static String sortString(String inputString)
{
char tempArray[] = inputString.toCharArray();
Arrays.sort(tempArray);
return new String(tempArray);
}
public static void main(String[] args)
{
String str = "amazon" ;
String []arr = { "fds" , "oxq" , "zoa" , "epw" , "amn" };
Vector<String> v = new Vector<String>(Arrays.asList(arr));
if (isPossible(v, str))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Time complexity: O(n*logn + m2*k*logk) where n is the size of the given string, m is the size of the given array, and k is the maximum size obtained by adding any two strings (which is basically the sum of the size of the two longest strings in the given array).
Space Complexity: O(x) where x is the maximum length of two input strings after concatenating
Method 2: Counting sort can be used to reduce the running time of the above approach. Counting sort uses a table to store the count of each character. We have 26 alphabets hence we make an array of size 26 to store counts of each character in the string. Then take the characters in increasing order to get the sorted string. Below is the implementation of the above approach:
Java
import java.util.*;
class GFG
{
static int MAX = 26 ;
static String countingsort( char [] s)
{
int []count = new int [MAX];
for ( int i = 0 ; i < s.length; i++)
{
count[s[i] - 'a' ]++;
}
int index = 0 ;
for ( int i = 0 ; i < MAX; i++)
{
int j = 0 ;
while (j < count[i])
{
s[index++] = ( char )(i + 'a' );
j++;
}
}
return String.valueOf(s);
}
static boolean isPossible(Vector<String> v,
String str)
{
str=countingsort(str.toCharArray());
for ( int i = 0 ; i < v.size() - 1 ; i++)
{
for ( int j = i + 1 ; j < v.size(); j++)
{
String temp = v.get(i) + v.get(j);
temp = countingsort(temp.toCharArray());
if (temp.equals(str))
{
return true ;
}
}
}
return false ;
}
public static void main(String[] args)
{
String str = "amazon" ;
String []arr = { "fds" , "oxq" , "zoa" , "epw" , "amn" };
Vector<String> v = new Vector<String>(Arrays.asList(arr));
if (isPossible(v, str))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Time complexity: O(n+(m^2)*k) where n is the size of the given string, m is the size of the given array, and k is the maximum size obtained by adding any two strings
Please refer complete article on Check if given string can be formed by two other strings or their permutations for more details!
Last Updated :
18 Aug, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...