এই আর্টিকেলে আমরা নিচের সমস্যা সমাধানের কথা শিখব।
সমস্যা: একটি টেক্সট এবং একটি প্যাটার্ন দেওয়া আছে, আমাদের প্যাটার্ন এবং এর পারমিউটেশন (অথবা एनাগ্রাম) এর সকল অকারেন্স টেক্সটে প্রিন্ট করতে হবে।
চলুন নিচের ইমপ্লিমেন্টেশনে সমাধানটি পর্যবেক্ষণ করি।
উদাহরণ
# ম্যাক্সিমাম ভ্যালু
MAX = 300
# কম্পেয়ার
def compare(arr1, arr2):
for i in range(MAX):
if arr1[i] != arr2[i]:
return False
return True
# সার্চ
def search(pat, txt):
M = len(pat)
N = len(txt)
# countP প্যাটার্ন অ্যাকাউন্ট
# countTW টেক্সট উইন্ডো কাউন্ট
countP = [0] * MAX
countTW = [0] * MAX
for i in range(M):
countP[ord(pat[i])] += 1
countTW[ord(txt[i])] += 1
# ট্রাভার্সাল
for i in range(M, N):
# করেন্ট উইন্ডো এবং প্যাটার্ন কাউন্ট কম্পেয়ার
if compare(countP, countTW):
print("Found at Index", (i - M))
# উইন্ডোতে ক্যারেক্টার যোগ
countTW[ord(txt[i])] += 1
# উইন্ডো থেকে ক্যারেক্টার রিমুভ
countTW[ord(txt[i - M])] -= 1
# লাস্ট উইন্ডো চেক
if compare(countP, countTW):
print("It is Found at Index :", N - M)
# মেইন
txt = "TUTORIALSPOINT"
pat = "TOR"
search(pat, txt)
আউটপুট
Found at Index 2

সभी ভেরিয়েবল লোকাল স্কোপে ঘোষণা করা হয়েছে এবং তাদের রেফারেন্স উপরের চিত্রে দেখা যাচ্ছে।
উপসংহার
এই আর্টিকেলে আমরা শিখেছি কিভাবে এনাগ্রাম সাবস্ট্রিং সার্চের পাইথন প্রোগ্রাম লিখতে হয়।