ধরুন আমাদের একটি ছোট হাতের স্ট্রিং আছে; আমাদের পরীক্ষা করতে হবে যে আমরা স্ট্রিংটিকে মাঝখান থেকে বিভক্ত করতে পারি যা দুটি অর্ধেক দেবে যাতে দুটি পক্ষের মধ্যে অন্তত এক-অক্ষরের পার্থক্য থাকে। এটি বিভিন্ন অক্ষর বা প্রতিটি অক্ষরের বিভিন্ন ফ্রিকোয়েন্সি ধারণ করতে পারে। যদি স্ট্রিংটি বিজোড় দৈর্ঘ্যের স্ট্রিং হয়, তাহলে মাঝের উপাদানটিকে উপেক্ষা করুন এবং অবশিষ্ট উপাদানগুলি পরীক্ষা করুন৷
সুতরাং, যদি ইনপুটটি s ="helloohekk" এর মত হয়, তাহলে আউটপুটটি True হবে "helloohekk" হিসাবে তাই বাম অংশ "hello" ডান অংশ "ohekk" বাম এবং ডান ভিন্ন।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- left_freq :=একটি খালি মানচিত্র
- right_freq :=একটি খালি মানচিত্র
- n :=s এর আকার
- আমি পরিসীমা 0 থেকে (n/2) - 1 এর ভাগফলের জন্য, কর
- left_freq[s[i]] :=left_freq[s[i]] + 1
- আমি (n/2) থেকে n - 1 পর্যন্ত রেঞ্জের ভাগফলের জন্য, কর
- right_freq[s[i]] :=right_freq[s[i]] + 1
- s এর প্রতিটি অক্ষরের জন্য, করুন
- যদি right_freq[char] বাম_freq[char] এর মত না হয়, তাহলে
- সত্য ফেরান
- যদি right_freq[char] বাম_freq[char] এর মত না হয়, তাহলে
- মিথ্যে ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
from collections import defaultdict def solve(s): left_freq = defaultdict(int) right_freq = defaultdict(int) n = len(s) for i in range(n//2): left_freq[s[i]] += 1 for i in range(n//2, n): right_freq[s[i]] += 1 for char in s: if right_freq[char] != left_freq[char]: return True return False s = "helloohekk" print(solve(s))
ইনপুট
"helloohekk"
আউটপুট
True