ধরুন আমাদের কাছে ছোট হাতের অক্ষরগুলির একটি স্ট্রিং রয়েছে (সবগুলিই ASCII অক্ষর), আমাদের প্রদত্ত স্ট্রিংয়ের সমস্ত স্বতন্ত্র অবিচ্ছিন্ন প্যালিনড্রোমিক সাব-স্ট্রিংগুলি খুঁজে বের করতে হবে৷
সুতরাং, যদি ইনপুটটি "লেভেল" এর মত হয়, তাহলে আউটপুট হবে 7 কারণ সাতটি সাবস্ট্রিং ['লেভেল', 'ইভ', 'l', 'e', 'v', 'e', 'l' রয়েছে। ]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
N :=26
-
n :=str এর দৈর্ঘ্য
-
যোগফল :=0
-
my_map :=N আকারের একটি তালিকা এবং 0
দিয়ে পূরণ করুন -
0 থেকে n রেঞ্জের জন্য, করুন
-
my_map[ASCII of (str[i]) - ASCII of ('a') ] :=my_map[ASCII of (str[i]) - ASCII of ('a') ] + 1
-
-
i 0 থেকে N রেঞ্জের জন্য, করুন
-
যদি my_map[i] অ-শূন্য হয়, তাহলে
-
যোগফল :=যোগফল +(my_map[i] *(my_map[i] + 1) / 2)
-
-
-
ফেরত যোগফল
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
N = 26
def all_palindrome_substr_count(str):
n = len (str)
sum = 0
my_map = [0] * N
for i in range(n):
my_map[ord(str[i]) - ord('a')] += 1
for i in range(N) :
if (my_map[i]):
sum += (my_map[i] * (my_map[i] + 1) // 2)
return sum
str = "level"
print (all_palindrome_substr_count(str)) ইনপুট
"level"
আউটপুট
7