Anagram Substring Search Python
PROGRAM TO PRINT ALL OCCURRENCES OF A PATTERN AND ITS ANAGRAMS(OR PERMUTAATIONS) IN GIVEN STRING
OUTPUT
Found at Index 0 Found at Index 5 Found at Index 6
MAX
=
256
# This function returns true
# if contents of arr1[] and arr2[]
# are same, otherwise false.
def
compare(arr1, arr2):
for
i
in
range
(
MAX
):
if
arr1[i] !
=
arr2[i]:
return
False
return
True
# This function search for all
# permutations of pat[] in txt[]
def
search(pat, txt):
M
=
len
(pat)
N
=
len
(txt)
# countP[]: Store count of
# all characters of pattern
# countTW[]: Store count of
# current window of text
countP
=
[
0
]
*
MAX
countTW
=
[
0
]
*
MAX
for
i
in
range
(M):
(countP[
ord
(pat[i]) ])
+
=
1
(countTW[
ord
(txt[i]) ])
+
=
1
# Traverse through remaining
# characters of pattern
for
i
in
range
(M,N):
# Compare counts of current
# window of text with
# counts of pattern[]
if
compare(countP, countTW):
print
(
"Found at Index"
, (i
-
M))
# Add current character to current window
(countTW[
ord
(txt[i]) ])
+
=
1
# Remove the first character of previous window
(countTW[
ord
(txt[i
-
M]) ])
-
=
1
# Check for the last window in text
if
compare(countP, countTW):
print
(
"Found at Index"
, N
-
M)
# Driver program to test above function
txt
=
"BACDGABCDA"
pat
=
"ABCD"
search(pat, txt)
Found at Index 0 Found at Index 5 Found at Index 6
Comments
Post a Comment