در این مطلب، ویدئو Palindrome معتبر – Leetcode 125 – Python با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:15:04
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,000 –> 00:00:01,760
لینک موجود در توضیحات را بررسی کنید
2
00:00:01,760 –> 00:00:04,000
که در آن میتوانید 10 عدد را
3
00:00:04,000 –> 00:00:06,480
در اشتراک آموزشی io خود پس انداز کنید، سلام به
4
00:00:06,480 –> 00:00:08,160
همه خوش آمدید و بیایید امروز
5
00:00:08,160 –> 00:00:10,000
چند کد جدید دیگر بنویسیم، بنابراین امروز بیایید
6
00:00:10,000 –> 00:00:12,320
مشکل پالیندروم معتبر را حل کنیم، من
7
00:00:12,320 –> 00:00:13,679
در واقع این دو را حل میکنم.
8
00:00:13,679 –> 00:00:15,440
راه های مختلف و من فکر می کنم هر دو راه
9
00:00:15,440 –> 00:00:17,199
قطعا مفید خواهد بود که
10
00:00:17,199 –> 00:00:19,680
در یک محیط مصاحبه قبل از شروع کار بدانیم
11
00:00:19,680 –> 00:00:21,680
، فقط می خواهم به سرعت اشاره کنم که این
12
00:00:21,680 –> 00:00:24,160
مشکل در واقع بخشی از
13
00:00:24,160 –> 00:00:28,000
لیست 75 سوال کور است و خوشبختانه ما در واقع بسیاری از سوالات را
14
00:00:28,000 –> 00:00:30,080
حل کرده ایم. اکثر
15
00:00:30,080 –> 00:00:32,079
سوالات نابینایان 75 من حتی یک
16
00:00:32,079 –> 00:00:34,000
لیست پخش از همه این سوالات
17
00:00:34,000 –> 00:00:35,680
در توضیحات دارم اگر می خواهید
18
00:00:35,680 –> 00:00:37,760
نگاهی بیندازید و البته ما
19
00:00:37,760 –> 00:00:40,160
امروز یک سوال دیگر را تکمیل می کنیم و یک قدم
20
00:00:40,160 –> 00:00:43,760
به تکمیل 100 نابینایان 75 نزدیکتر می شویم بنابراین به ما
21
00:00:43,760 –> 00:00:46,320
داده می شود یک رشته تنها کاری که میخواهیم انجام دهیم این است که
22
00:00:46,320 –> 00:00:48,800
مشخص کنیم آیا آن یک palindrome است یا خیر، اگر اینطور
23
00:00:48,800 –> 00:00:50,800
نیست، میتوانیم درست را برگردانیم اگر اینطور نیست، ما
24
00:00:50,800 –> 00:00:54,079
false را برگردانیم، فقط یک نکته این است که
25
00:00:54,079 –> 00:00:57,280
ما فقط کاراکترهای الفبایی عددی را در نظر میگیریم.
26
00:00:57,280 –> 00:01:00,879
در لیست و ما
27
00:01:00,879 –> 00:01:04,159
با نادیده
28
00:01:04,159 –> 00:01:07,200
گرفتن حروف حروف بزرگ و کوچک را نادیده می گیریم، بنابراین در رشته ورودی
29
00:01:07,200 –> 00:01:08,479
می توانید ببینید که سمت چپ
30
00:01:08,479 –> 00:01:10,799
کاراکتر بزرگ است و سمت راست ترین
31
00:01:10,799 –> 00:01:12,960
کاراکتر کوچک است و هر دوی این
32
00:01:12,960 –> 00:01:15,920
کاراکترها یکسان در نظر گرفته می شوند، بنابراین اگر
33
00:01:15,920 –> 00:01:18,159
یک رشته داشته باشیم. یک رشته ورودی مانند
34
00:01:18,159 –> 00:01:20,880
بزرگ و پایینتر، این رشته خودش یک
35
00:01:20,880 –> 00:01:22,880
palindrome است، بنابراین ما درست را برمیگردانیم، حتی
36
00:01:22,880 –> 00:01:24,320
اگر یکی با حروف بزرگ و دیگری
37
00:01:24,320 –> 00:01:26,960
کوچک باشد، حال حروف
38
00:01:26,960 –> 00:01:29,280
کاراکترها را نادیده میگیریم و همچنین وقتی میگویند
39
00:01:29,280 –> 00:01:31,280
ما اساساً فقط کاراکترهای الفبایی عددی را در نظر میگیریم.
40
00:01:31,280 –> 00:01:33,600
این بدان معناست که ما میتوانیم
41
00:01:33,600 –> 00:01:35,360
هر چیزی را که یک کاراکتر الفبایی نیست نادیده بگیریم،
42
00:01:35,360 –> 00:01:37,119
چه
43
00:01:37,119 –> 00:01:39,200
الفبایی است، اساساً همه چیز از
44
00:01:39,200 –> 00:01:41,840
a بزرگ تا بزرگ z همه چیز
45
00:01:41,840 –> 00:01:44,079
از حروف کوچک a تا کوچک c و
46
00:01:44,079 –> 00:01:47,759
همه چیز از صفر تا نه به
47
00:01:47,759 –> 00:01:51,040
سمت راست هر کاراکتر و هر رقم، بنابراین
48
00:01:51,040 –> 00:01:53,520
اساساً در این رشته ورودی ممکن
49
00:01:53,520 –> 00:01:56,000
است در ابتدا شبیه یک پالیندروم به نظر نرسد،
50
00:01:56,000 –> 00:01:58,079
اما پاسخ بله درست است، این یک
51
00:01:58,079 –> 00:02:00,079
پالیندروم است زیرا و در واقع قبل از اینکه وارد
52
00:02:00,079 –> 00:02:01,680
شویم
53
00:02:01,680 –> 00:02:03,600
اگر به خوبی به خاطر نداشته باشید
54
00:02:03,600 –> 00:02:05,439
، سادهترین راه برای بررسی اینکه
55
00:02:05,439 –> 00:02:08,239
آیا رشتهای پالیندروم است یا نه، اساساً
56
00:02:08,239 –> 00:02:11,520
این است که به همان روشی خوانده شود که وقتی
57
00:02:11,520 –> 00:02:14,160
معکوس میشود، یعنی اگر
58
00:02:14,160 –> 00:02:16,080
رشته دقیقاً یکسان باشد، پس از
59
00:02:16,080 –> 00:02:19,520
معکوس شدن آن، به عنوان مثال a b a اگر
60
00:02:19,520 –> 00:02:22,560
این رشته را معکوس کنیم، همچنان a b a است،
61
00:02:22,560 –> 00:02:25,360
بنابراین یک پالیندروم است، درست است، و
62
00:02:25,360 –> 00:02:27,360
بیایید این رشته را اگر معکوس کنیم،
63
00:02:27,360 –> 00:02:28,959
اگر
64
00:02:28,959 –> 00:02:31,120
آن را به ترتیب معکوس بخوانیم، هنوز دقیقاً یکسان است و پاسخ
65
00:02:31,120 –> 00:02:33,120
این است بله، اجازه دهید
66
00:02:33,120 –> 00:02:34,319
ابتدا چند کاراکتر را با هم مقایسه کنیم، اجازه دهید از
67
00:02:34,319 –> 00:02:36,400
ابتدا درست a شروع کنیم
68
00:02:36,400 –> 00:02:38,400
و به یاد داشته باشیم که ما k را نادیده می گیریم، بنابراین وقتی
69
00:02:38,400 –> 00:02:39,760
می گویم نادیده گرفتن حروف کوچک،
70
00:02:39,760 –> 00:02:41,680
اساساً آن را به حروف کوچک تبدیل می کنم، بنابراین
71
00:02:41,680 –> 00:02:42,800
همه چیز کوچکتر می شود،
72
00:02:42,800 –> 00:02:45,040
خوب. ما یک کاراکتر خوب بعدی داریم
73
00:02:45,040 –> 00:02:47,599
یک کاراکتر فاصله است، اما به یاد داشته باشید که ما
74
00:02:47,599 –> 00:02:49,200
فقط حروف عددی را در نظر می گیریم، بنابراین
75
00:02:49,200 –> 00:02:50,800
ما حتی این فاصله را در نظر نمی گیریم و
76
00:02:50,800 –> 00:02:52,879
می خواهیم از آن فاصله رد شویم، بنابراین فقط آن را
77
00:02:52,879 –> 00:02:53,680
78
00:02:53,680 –> 00:02:55,280
درست در نویسه بعدی m
79
00:02:55,280 –> 00:02:57,519
و سپس کاراکتر بعدی یک nex حذف کنید. t کاراکتر
80
00:02:57,519 –> 00:02:58,800
n بنابراین ما فقط این را
81
00:02:58,800 –> 00:03:00,720
از ابتدای رشته گرفتیم یک مرد درست،
82
00:03:00,720 –> 00:03:02,879
بیایید از انتهای رشته شروع
83
00:03:02,879 –> 00:03:05,280
کنیم، یک حروف کوچک یک راست داریم و سپس
84
00:03:05,280 –> 00:03:07,200
یک حرف کوچک داریم، سپس یک
85
00:03:07,200 –> 00:03:09,200
حروف کوچک a داریم، سپس حروف کوچک n داریم.
86
00:03:09,200 –> 00:03:10,640
حتی از انتهای رشته شروع میشود، به
87
00:03:10,640 –> 00:03:12,640
نظر میرسد که مانند
88
00:03:12,640 –> 00:03:14,879
ابتدای آن است که آن را برعکس میخوانیم و
89
00:03:14,879 –> 00:03:17,040
معلوم میشود که اگر میدانید
90
00:03:17,040 –> 00:03:19,680
این رشته را بردارید و
91
00:03:19,680 –> 00:03:21,680
تمام فاصلهها را همه کاراکترهای خاص حذف کنید
92
00:03:21,680 –> 00:03:23,599
و سپس همه چیزهای
93
00:03:23,599 –> 00:03:25,519
دیگر را به حروف کوچک و سپس آن را برعکس
94
00:03:25,519 –> 00:03:28,080
می کنیم، دقیقا همان رشته خواهد بود و
95
00:03:28,080 –> 00:03:29,360
این رویکردی است
96
00:03:29,360 –> 00:03:30,959
که من در پیش خواهم گرفت.
97
00:03:30,959 –> 00:03:32,640
98
00:03:32,640 –> 00:03:34,319
99
00:03:34,319 –> 00:03:35,760
ما می خواهیم و سپس
100
00:03:35,760 –> 00:03:37,440
آنها را به حروف کوچک تبدیل می کنیم، سپس
101
00:03:37,440 –> 00:03:39,040
رشته را معکوس می کنیم و سپس بررسی
102
00:03:39,040 –> 00:03:41,280
می کنیم که آیا هنوز هم برابر است، بنابراین حالا بیایید
103
00:03:41,280 –> 00:03:43,200
وارد راه حل کد نویسی حداقل
104
00:03:43,200 –> 00:03:45,360
اولین راه حل کد نویسی شویم، پس حالا بیایید
105
00:03:45,360 –> 00:03:47,040
آن را کدگذاری کنیم و به یاد داشته باشیم که می خواهیم ساخته شویم
106
00:03:47,040 –> 00:03:49,599
رشته جدیدی را
107
00:03:49,599 –> 00:03:51,560
که قرار است تمام
108
00:03:51,560 –> 00:03:54,159
کاراکترهای غیر الفبایی را از
109
00:03:54,159 –> 00:03:56,000
رشته ورودی حذف کند، بنابراین این راه حل نوعی
110
00:03:56,000 –> 00:03:57,439
راه حل تقلبی است که در
111
00:03:57,439 –> 00:04:00,159
آن از تعداد زیادی توابع داخلی و
112
00:04:00,159 –> 00:04:01,760
حافظه اضافی نیز استفاده خواهم کرد. بنابراین اگر آن
113
00:04:01,760 –> 00:04:03,120
114
00:04:03,120 –> 00:04:05,360
115
00:04:05,360 –> 00:04:08,480
کاراکتر حروف عددی باشد و
116
00:04:08,480 –> 00:04:10,000
نکته خوب پایتون است، فقط از طریق تک تک کاراکترهای رشته s تکرار می کنیم و در واقع فکر می کنم
117
00:04:10,000 –> 00:04:13,360
اکثر کتابخانه ها اکثر زبان ها مانند
118
00:04:13,360 –> 00:04:15,680
جاوا یک تابع داخلی برای بررسی اینکه آیا یک
119
00:04:15,680 –> 00:04:18,320
کاراکتر است یا نه. رشته حروفی عددی است
120
00:04:18,320 –> 00:04:20,160
پایتون حداقل این کار را انجام می دهد، ما بررسی می کنیم که
121
00:04:20,160 –> 00:04:22,160
آیا این کاراکتر حروف عددی است یا
122
00:04:22,160 –> 00:04:25,040
نه، اگر می خواهیم آن را در رشته جدید قرار
123
00:04:25,040 –> 00:04:26,400
دهیم، بنابراین می خواهیم
124
00:04:26,400 –> 00:04:28,720
آن کاراکتر را برداریم و آن را به رشته جدید اضافه کنیم.
125
00:04:28,720 –> 00:04:30,880
چیزی که
126
00:04:30,880 –> 00:04:32,560
نمیخواهید فراموش کنید این است که ما میخواهیم مطمئن شویم که
127
00:04:32,560 –> 00:04:34,400
هر کاراکتری کوچک است، بنابراین قبل از
128
00:04:34,400 –> 00:04:36,000
اینکه آن را به رشته جدید اضافه کنیم،
129
00:04:36,000 –> 00:04:38,960
میخواهیم مطمئن شویم که کوچک است، بنابراین
130
00:04:38,960 –> 00:04:40,800
آن را به حروف کوچک تبدیل میکنیم و سپس
131
00:04:40,800 –> 00:04:42,400
انجام شده است که ما در حال حاضر با رشته جدیدی که
132
00:04:42,400 –> 00:04:44,080
همه کاراکترهای دیگر را از آن حذف
133
00:04:44,080 –> 00:04:45,680
کردیم، اکنون فقط می خواهیم بررسی کنیم که آیا دقیقاً یکسان است یا خیر
134
00:04:45,680 –> 00:04:49,120
، بنابراین
135
00:04:49,120 –> 00:04:50,800
ما فقط می خواهیم این رشته جدید
136
00:04:50,800 –> 00:04:52,960
را با رشته معکوس مقایسه کنیم که
137
00:04:52,960 –> 00:04:55,520
در پایتون شما میتوانید این کار را انجام دهید،
138
00:04:55,520 –> 00:04:57,360
میدانید که این نحوی برای
139
00:04:57,360 –> 00:05:00,160
معکوس کردن یک رشته است، بنابراین اگر آنها مساوی هستند،
140
00:05:00,160 –> 00:05:02,000
میتوانیم درست را برگردانیم اگر مساوی نباشند،
141
00:05:02,000 –> 00:05:04,400
این همان
142
00:05:04,400 –> 00:05:05,919
کاری است که ما میخواهیم انجام دهیم تا مشخص کنیم که آیا
143
00:05:05,919 –> 00:05:08,240
یک palindrome است یا نه. بیایید کد را اجرا کنیم
144
00:05:08,240 –> 00:05:10,080
و مطمئن شویم که همانطور که
145
00:05:10,080 –> 00:05:12,880
در سمت چپ می بینید کار می کند بله کار می کند،
146
00:05:12,880 –> 00:05:14,560
اما برخی از کاستی ها در
147
00:05:14,560 –> 00:05:17,039
راه حل وجود دارد که شاید مصاحبه کننده
148
00:05:17,039 –> 00:05:18,960
شما نمی خواهد شما از آن استفاده کنید، شاید آنها نمی
149
00:05:18,960 –> 00:05:20,960
خواهند شما از این استفاده کنید.
150
00:05:20,960 –> 00:05:22,639
تابع الفبایی و آنها از شما می خواهند
151
00:05:22,639 –> 00:05:24,880
که خودتان آن را پیاده سازی کنید و شاید نمی خواهند
152
00:05:24,880 –> 00:05:27,280
شما به وضوح از حافظه اضافی استفاده
153
00:05:27,280 –> 00:05:29,759
154
00:05:29,759 –> 00:05:31,440
155
00:05:31,440 –> 00:05:33,520
156
00:05:33,520 –> 00:05:34,960
کنید. آن بود
157
00:05:34,960 –> 00:05:37,280
معکوس کردن نسخه اصلی، بنابراین بیایید ببینیم
158
00:05:37,280 –> 00:05:38,720
چگونه می توانیم این راه حل را بهبود ببخشیم،
159
00:05:38,720 –> 00:05:41,440
خب حالا بیایید ببینیم چگونه
160
00:05:41,440 –> 00:05:43,120
می توانیم این مشکل را با
161
00:05:43,120 –> 00:05:45,840
حافظه اضافی ثابت بدون استفاده
162
00:05:45,840 –> 00:05:47,759
از حافظه اضافی بدون ایجاد نسخه جدیدی
163
00:05:47,759 –> 00:05:50,080
از این رشته حل کنیم و راه اصلی
164
00:05:50,080 –> 00:05:51,919
این است که با استفاده از نشانگرها، بنابراین
165
00:05:51,919 –> 00:05:53,440
ما دو نشانگر خواهیم داشت، یک
166
00:05:53,440 –> 00:05:55,759
اشاره گر چپ و یک اشاره گر راست، زیرا
167
00:05:55,759 –> 00:05:57,759
به یاد داشته باشید که راه های متعددی برای
168
00:05:57,759 –> 00:05:59,440
بررسی اینکه آیا یک رشته یک palindrome است وجود دارد، ما
169
00:05:59,440 –> 00:06:01,759
مجبور نیستیم آن را معکوس کنیم، فقط می
170
00:06:01,759 –> 00:06:03,600
توانیم کاراکتر سمت چپ را با هم مقایسه کنیم.
171
00:06:03,600 –> 00:06:05,520
راستترین کاراکتر اگر برابر
172
00:06:05,520 –> 00:06:07,680
باشند، نشانگرها را در نشانگر چپ تغییر میدهیم،
173
00:06:07,680 –> 00:06:09,280
به اینجا میآید و نشانگر سمت راست
174
00:06:09,280 –> 00:06:11,360
به اینجا میرود و سپس میتوانیم
175
00:06:11,360 –> 00:06:13,039
بررسی کنیم که اگر کاراکترها
176
00:06:13,039 –> 00:06:15,600
مساوی نیستند، آنها را برمیگردانیم،
177
00:06:15,600 –> 00:06:17,840
اما چگونه آیا می دانیم چه زمانی باید متوقف
178
00:06:17,840 –> 00:06:19,440
شویم، ما به افزایش
179
00:06:19,440 –> 00:06:20,880
نشانگر چپ ادامه می دهیم و به
180
00:06:20,880 –> 00:06:22,960
کاهش نشانگر سمت راست ادامه می دهیم تا زمانی
181
00:06:22,960 –> 00:06:25,360
که در نهایت در وسط قرار بگیرند یا
182
00:06:25,360 –> 00:06:27,600
نشانگر چپ که می دانید بگذرد.
183
00:06:27,600 –> 00:06:28,880
اشاره گر سمت راست نشانگر سمت چپ
184
00:06:28,880 –> 00:06:30,080
اینجا می شود و نشانگر سمت راست
185
00:06:30,080 –> 00:06:31,759
اینجاست، به این ترتیب ما می دانیم که چه زمانی می توانیم
186
00:06:31,759 –> 00:06:34,720
متوقف شویم یا شاید
187
00:06:34,720 –> 00:06:36,960
188
00:06:36,960 –> 00:06:38,880
اگر طول رشته عجیب و غریب
189
00:06:38,880 –> 00:06:41,039
باشد، آنها دقیقاً در همان کاراکتر ملاقات کنند، بنابراین در واقع بسیار ساده است.
190
00:06:41,039 –> 00:06:43,440
خیلی بد نیست، پس چه کنیم،
191
00:06:43,440 –> 00:06:45,199
خوب چپ اینجا سمت راست است، اینجا
192
00:06:45,199 –> 00:06:46,639
بزرگ است، اما البته ما
193
00:06:46,639 –> 00:06:48,080
آن را به حروف کوچک تبدیل می کنیم، این
194
00:06:48,080 –> 00:06:50,400
حروف کوچک a است، بنابراین آنها به سمت راست برابر هستند، خوب است،
195
00:06:50,400 –> 00:06:52,560
بنابراین اشاره گر سمت راست می رود
196
00:06:52,560 –> 00:06:54,960
با یک کاهش می یابد بنابراین نشانگر سمت راست
197
00:06:54,960 –> 00:06:56,720
در اینجا در کاراکتر m
198
00:06:56,720 –> 00:06:58,000
نشانگر سمت چپ
199
00:06:58,000 –> 00:06:59,360
یک افزایش می یابد و در
200
00:06:59,360 –> 00:07:02,000
اینجا خواهد بود که ما در کاراکتر فاصله هستیم،
201
00:07:02,000 –> 00:07:04,400
اما به یاد داشته باشید که می خواهیم فاصله های خود را نادیده بگیریم.
202
00:07:04,400 –> 00:07:06,319
میخواهیم همه چیز را نادیده بگیریم به جز
203
00:07:06,319 –> 00:07:08,639
نویسههای عددی آلفا و آیا میتوانیم
204
00:07:08,639 –> 00:07:11,120
بدون استفاده از یک تابع داخلی این کار را انجام دهیم،
205
00:07:11,120 –> 00:07:13,759
اجازه دهید به شما نشان دهم چگونه میتوانیم
206
00:07:13,759 –> 00:07:15,599
این کار را انجام دهیم که اساساً من یک
207
00:07:15,599 –> 00:07:17,360
گوگل سریع انجام دادم و در واقع
208
00:07:17,360 –> 00:07:20,880
از ascii استفاده میکنیم. ارزش برای تعیین اینکه آیا یک
209
00:07:20,880 –> 00:07:23,120
کاراکتر اساساً الفبایی عددی است
210
00:07:23,120 –> 00:07:25,039
چیزی که باید بدانید این است که هر
211
00:07:25,039 –> 00:07:26,479
نمادی
212
00:07:26,479 –> 00:07:29,120
که نمادهای ascii را می شناسید 128 عدد از آنها است
213