ধরুন, একটি লোয়ারকেস স্ট্রিং s দেওয়া হয়েছে। আমাদের যাচাই করতে হবে যে আমরা কি সর্বোচ্চ একটি ক্যারেক্টার ডিলিট করে স্ট্রিং-কে "বৈধ" বানাতে পারি। এখানে "বৈধ" মানে স্ট্রিং-এ থাকা সব یونিক ক্যারেক্টারের ফ্রিকোয়েন্সি (উপস্থিতির সংখ্যা) সমান।
যেমন, ইনপুট s = "xyyzx" হলে আউটপুট হবে True, কারণ 'z' ডিলিট করলে স্ট্রিং হবে "xyyx" যেখানে 'x' এবং 'y'-র ফ্রিকোয়েন্সি দুটোই ২।
সমাধানের ধাপসমূহ
- ২৬ সাইজের
occurrenceঅ্যারে-এ প্রতিটি ক্যারেক্টারের ফ্রিকোয়েন্সি গণনা করুন। - প্রথম নন-জিরো ফ্রিকোয়েন্সি
occr1এবং তার কাউন্টoccr1_cntবের করুন। - দ্বিতীয় নন-জিরো ফ্রিকোয়েন্সি
occr2এবং তার কাউন্টoccr2_cntবের করুন। - বাকি ফ্রিকোয়েন্সিগুলো চেক করুন:
- যদি কোনো ফ্রিকোয়েন্সি
occr1বাoccr2-এর সাথে মেলে না, তবে False। - যদি
occr1_cnt > 1এবংoccr2_cnt > 1হয় (অর্থাৎ দুটোও ফ্রিকোয়েন্সি একাধিকবার আসছে), তবে False।
- যদি কোনো ফ্রিকোয়েন্সি
- অন্যথায় True ফেরত দিন।
উদাহরণ কোড
size = 26
def solve(str):
occurrence = [0] * size
for i in range(len(str)):
occurrence[ord(str[i]) - ord('a')] += 1
occr1 = 0
occr1_cnt = 0
for i in range(size):
if occurrence[i] != 0:
occr1 = occurrence[i]
occr1_cnt = 1
break
occr2 = 0
occr2_cnt = 0
for j in range(i+1, size):
if occurrence[j] != 0:
if occurrence[j] == occr1:
occr1_cnt += 1
else:
occr2_cnt = 1
occr2 = occurrence[j]
break
for k in range(j+1, size):
if occurrence[k] != 0:
if occurrence[k] == occr1:
occr1_cnt += 1
if occurrence[k] == occr2:
occr2_cnt += 1
else:
return False
if occr1_cnt > 1 and occr2_cnt > 1:
return False
return True
s = "xyyzx"
print(solve(s))
ইনপুট
"xyyzx"
আউটপুট
True