মান লিজিয়ে একটি স্ট্রিং আছে s এবং আরেকটি ইন্টিজার অ্যারে cost যেখানে cost[i] হল s-এর i-তম ক্যারেক্টার ডিলিট করার খরচ। আমাদের ন্যূনতম কস্টে ডিলিশন করতে হবে যাতে দুটি একই অক্ষর পাশাপাশি না থাকে। সকল ডিলিশন একসাথে হবে, তাই একটা মুছে দিলে অন্যগুলোর কস্ট পরিবর্তন হবে না।
যেমন, ইনপুট হলে s = "pptpp", cost = [2,3,4,5,2], তবে আউটপুট হবে 4 কারণ প্রথম ও শেষ 'p' মুছে দিলে (খরচ ২+২=৪) স্ট্রিং হবে "ptp" যেখানে কোনো দুটি একই অক্ষর পাশাপাশি নেই।
সমাধানের ধাপসমূহ
cost_f := 0, i := 1, ind := 0i = 1থেকেlen(s)-1পর্যন্ত:cur, c_cost := s[i], cost[i]prev, p_cost := s[i-1], cost[i-1]যদি
ind == 1হয়, তবেprev, p_cost := prev_i, cost_iযদি
cur == prevহয়, তবে:যদি
c_cost >= p_costহয়, তবেcost_f += p_cost, prev_i=cost_i=0, ind=0যদি
c_cost < p_costহয়, তবেcost_f += c_cost, ind=1, prev_i=prev, cost_i=p_cost
অন্যথায়,
prev_i=cost_i=0, ind=0
cost_fরিটার্ন করুন।
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন:
def solve(s, cost):
cost_f = 0
i = 1
ind = 0
for i in range(1, len(s)):
cur, c_cost = s[i], cost[i]
prev, p_cost = s[i-1], cost[i-1]
if ind == 1:
prev, p_cost = prev_i, cost_i
if cur == prev:
if c_cost >= p_cost:
cost_f += p_cost
prev_i, cost_i = 0, 0
ind = 0
if c_cost < p_cost:
cost_f += c_cost
ind = 1
prev_i, cost_i = prev, p_cost
else:
prev_i, cost_i = 0, 0
ind = 0
return cost_f
s = "pptpp"
cost = [2,3,4,5,2]
print(solve(s, cost))ইনপুট
"pptpp", [2,3,4,5,2]
আউটপুট
4