ধরুন আমাদের কাছে ছোট হাতের অক্ষরগুলির একটি স্ট্রিং রয়েছে (সবগুলিই 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