Smallest window Python
- Get link
- X
- Other Apps
PROGRAM TO FIND THE SMALLEST WINDOW IN A STRING CONTAINING ALL CHARACTERS OF ANOTHER STRING
no_of_chars = 256 # Function to find smallest window # containing all characters of 'pat' def findSubString(string, pat): len1 = len(string) len2 = len(pat) # check if string's length is less than pattern's # length. If yes then no such window can exist if len1 < len2: print("No such window exists") return "" hash_pat = [0] * no_of_chars hash_str = [0] * no_of_chars # store occurrence ofs characters of pattern for i in range(0, len2): hash_pat[ord(pat[i])] += 1 start, start_index, min_len = 0, -1, float('inf') # start traversing the string count = 0 # count of characters for j in range(0, len1): # count occurrence of characters of string hash_str[ord(string[j])] += 1 # If string's char matches with # pattern's char then increment count if (hash_pat[ord(string[j])] != 0 and hash_str[ord(string[j])] <= hash_pat[ord(string[j])]): count += 1 # if all the characters are matched if count == len2: # Try to minimize the window i.e., check if # any character is occurring more no. of times # than its occurrence in pattern, if yes # then remove it from starting and also remove # the useless characters. while (hash_str[ord(string[start])] > hash_pat[ord(string[start])] or hash_pat[ord(string[start])] == 0): if (hash_str[ord(string[start])] > hash_pat[ord(string[start])]): hash_str[ord(string[start])] -= 1 start += 1 # update window size len_window = j - start + 1 if min_len > len_window: min_len = len_window start_index = start # If no window found if start_index == -1: print("No such window exists") return "" # Return substring starting from # start_index and length min_len return string[start_index : start_index + min_len] # Driver code if __name__ == "__main__": string = "this is a test string" pat = "tist" print("Smallest window is : ") print(findSubString(string, pat))
OUTPUT
Smallest window is : t stri
- Get link
- X
- Other Apps
Comments
Post a Comment