گاهی لازم نیست همه زوجها را امتحان کنیم؛ دو شماره خانه کافی است تا از دو سمت به مرکز نزدیک شویم. به این شمارهها اشارهگر میگیم، اما در این دوره فقط دو متغیر صحیحاند. left از صفر و right از آخرین شاخص شروع میشود. هر قدم باید دلیل روشنی داشته باشد و محدوده بررسینشده را کوچک کند.
values = [3, 6, 9, 12]
left, right = 0, len(values) - 1
pairs = []
while left < right:
pairs.append([values[left], values[right]])
left += 1
right -= 1
print(pairs) # [[3, 12], [6, 9]]
اینجا هدف فقط دیدن زوجهای روبهرو است؛ هنوز ادعا نمیکنیم همه زوجهای ممکن دیده شدهاند. اگر تعداد اعضا فرد باشد، عضو وسط جفت جداگانهای ندارد. برای خالی یا تکعضوی، شرط از ابتدا نادرست است.
در بررسی قرینه بودن متن، هر بار دو نویسه روبهرو را مقایسه میکنیم؛ در مجموع دو عدد مرتب، جهت حرکت از جمع دو سر تعیین میشود. خطای رایج اینه که اسم الگو را حفظ کنیم ولی ندانیم چرا یک سمت را کنار میگذاریم. ✍️ هر حرکت باید همراه یک دلیل و یک شرط پایان باشد.
فعالیت شما
حرکت دو شاخص از دو سر را در مثال بخوان؛ زوجهای روبهرو بررسی میشوند، عضو وسط تنها جفت نمیسازد و خالی هیچ دوری ندارد. این گام خواندنی است.