Given a string “str” and another string “sub_str”. We are allowed to delete “sub_str” from “str” any number of times. It is also given that the “sub_str” appears only once at a time. The task is to find if “str” can become empty by removing “sub_str” again and again. Examples:
Input : str = "GEEGEEKSKS", sub_str = "GEEKS" Output : Yes Explanation : In the string GEEGEEKSKS, we can first delete the substring GEEKS from position 4. The new string now becomes GEEKS. We can again delete sub-string GEEKS from position 1. Now the string becomes empty. Input : str = "GEEGEEKSSGEK", sub_str = "GEEKS" Output : No Explanation : In the string it is not possible to make the string empty in any possible manner.
We have existing solution for this problem please refer Check if a string can become empty by recursively deleting a given sub-string link. We will solve this problem in python using String Slicing. Approach is very simple,
- Use find() method of string to search given pattern sub-string.
- If sub-string lies in main string then find function will return index of it’s first occurrence.
- Now slice string in two parts, (i) from start of string till index-1 of founded sub-string, (ii) (start from first index of founded sub-string + length of sub-string) till end of string.
- Concatenate these two sliced part and repeat from step 1 until original string becomes empty or we don’t find sub-string anymore.
Implementation:
Python3
def checkEmpty( input , pattern): # If both are empty if len ( input ) = = 0 and len (pattern) = = 0 : return 'true' # If only pattern is empty if len (pattern) = = 0 : return 'false' while ( len ( input ) ! = 0 ): # find sub-string in main string index = input .find(pattern) # check if sub-string founded or not if (index = = ( - 1 )): return 'false' # slice input string in two parts and concatenate input = input [ 0 :index] + input [index + len (pattern):] return 'true' # Driver program if __name__ = = "__main__" : input = 'GEEGEEKSKS' pattern = 'GEEKS' print (checkEmpty( input , pattern)) |
true
Time Complexity: O(n/m), where n is the length of string, and m is the length of substring
Auxiliary Space: O(1)