Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Python3 Program for Check if given string can be formed by two other strings or their permutations

  • Last Updated : 24 Jan, 2022

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

Below is the implementation of the above approach:

Python3




# Python3 implementation of the approach 
  
# Function that returns true if str can be 
# generated from any permutation of the 
# two strings selected from the given vector 
def isPossible(v, string ) : 
      
    char_list = list(string)
      
    # Sort the given string
    char_list.sort()
      
    # Select two strings at a time from given vector
    for i in range(len(v)-1) :
        for j in range(len(v)) :
              
            # Get the concatenated string
            temp = v[i] + v[j];
              
            # Sort the resultant string 
            temp_list = list(temp)
            temp_list.sort()
              
            # If the resultant string is equal
            # to the given string str
            if (temp_list == char_list) :
                return True;
                  
    # No valid pair found
    return False
  
# Driver code 
if __name__ == "__main__"
  
    string = "amazon"
    v = [ "fds", "oxq", "zoa", "epw", "amn" ]; 
  
    if (isPossible(v, string)):
        print("Yes"); 
    else :
        print("No"); 
          
# This code is contributed by AnkitRai01


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:

Python3




# Python 3 implementation of the approach
MAX = 26
  
# Function to sort the given string
# using counting sort
def countingsort(s):
    # Array to store the count of each character
    count = [0 for i in range(MAX)]
    for i in range(len(s)):
        count[ord(s[i]) - ord('a')] += 1
    index = 0
  
    # Insert characters in the string
    # in increasing order
      
    for i in range(MAX):
        j = 0
        while (j < count[i]):
            s = s.replace(s[index],chr(97+i))
            index += 1
            j += 1
          
  
# Function that returns true if str can be
# generated from any permutation of the
# two strings selected from the given vector
def isPossible(v, str1):
    # Sort the given string
    countingsort(str1);
  
    # Select two strings at a time from given vector
    for i in range(len(v)-1):
        for j in range(i + 1,len(v),1):
            # Get the concatenated string
            temp = v[i] + v[j]
  
            # Sort the resultant string
            countingsort(temp)
  
            # If the resultant string is equal
            # to the given string str
            if (temp == str1):
                return False
              
    # No valid pair found
    return True
  
# Driver code
if __name__ == '__main__':
    str1 = "amazon"
    v = ["fds", "oxq", "zoa", "epw", "amn"]
  
    if (isPossible(v, str1)):
        print("Yes")
    else:
        print("No")
  
# This code is contributed by
# Surendra_Gangwar


Please refer complete article on Check if given string can be formed by two other strings or their permutations for more details!

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!