একটি স্ট্রিং দেওয়া আছে (সব ছোট হাতের ASCII ক্যারেক্টার)। স্ট্রিং-র সকলISTINCT কন্টিনিউয়াস (continuous) প্যালিনড্রোমিক সাবস্ট্রিং-এর সংখ্যা বের করতে হবে।
উদাহরণ
ইনপুট: "level"
আউটপুট: ৭ (সাবস্ট্রিংগুলো: 'level', 'eve', 'l', 'e', 'v', 'e', 'l')
সমাধানের পদ্ধতি
- প্রতিটি ক্যারেক্টারর ফ্রিকোয়েন্সি গণনা করা হয়।
- একক ক্যারেক্টার থেকে বने প্যালিনড্রোম: প্রতিটি ক্যারেক্টার c-র জন্য count[c] × (count[c] + 1) / 2
- সর্বমোট সমস্ত ক্যারেক্টরের জন্য এই ফর্মুলা লাগিয়ে যোগ করা হয়।
- দ্রষ্টব্য: এই পদ্ধতিটি স্ট্রিং-র ক্যারেক্টারগুলো সাজানো (sorted) হলে পাওয়া প্যালিনড্রোমিক সাবস্ট্রিং গণনা করে।
পাইথন কোড
N = 26
def all_palindrome_substr_count(s):
n = len(s)
total = 0
my_map = [0] * N
for i in range(n):
my_map[ord(s[i]) - ord('a')] += 1
for i in range(N):
if my_map[i]:
total += (my_map[i] * (my_map[i] + 1)) // 2
return total
s = "level"
print(all_palindrome_substr_count(s))
ইনপুট
"level"
আউটপুট
7