آرین سليمان زاده
  • الرئيسية
  • المدونة
  • البودكاست
  • الفيديوهات
  • تواصل
العربيةArabic
DeutschGerman
EnglishEnglish
فارسیPersian
한국어Korean
中文Chinese
اللوحة•تواصل سريع

Languages

Choose your interface locale

ar

العربية

Arabic

de

Deutsch

German

en

English

English

fa

فارسی

Persian

ko

한국어

Korean

zh

中文

Chinese

احجز موعداً

أرسل رسالة قصيرة — سأرد في أقرب وقت ممكن.

LinkedInاستجابة سريعة
الرئيسية/المقالات/ما هو Palindrome؟ فحص السلاسل المتناظرة باستخدام Two Pointers وTypeScript
Algorithmsمقال

ما هو Palindrome؟ فحص السلاسل المتناظرة باستخدام Two Pointers وTypeScript

Palindrome هو نص أو رقم يُقرأ بالطريقة نفسها من اليمين واليسار. نشرح كيفية اكتشافه باستخدام Two Pointers، والتعقيد، وTypeScript، ومعالجة المسافات والرموز.

١٩ أغسطس ٢٠٢٦6 دقيقة قراءة0 المشاهدات
#Algorithms#Palindrome#Two Pointers#String Algorithms#TypeScript

Arian Soleimanzadeh

Software Engineer & Researcher

خوارزمية فحص Palindrome باستخدام مؤشرين يتحركان من طرفي النص نحو المركز

Arian Soleimanzadeh

ذكاء اصطناعي · برمجة · منتج

بحث + هندسة
في هذه الصفحة
الطريقة البسيطة: ReverseTwo Pointersتجاهل المسافات والرموزالأرقامRecursionAlmost Palindromeتطبيقات ومشكلات مرتبطةCase Sensitivityسؤال مقابلات شائعحالات خاصةالخلاصة

Palindrome هو نص أو رقم أو تسلسل تكون قراءته من البداية إلى النهاية مماثلة لقراءته من النهاية إلى البداية.

أمثلة:

racecar
level
madam
1221

بينما:

hello
algorithm
1234

ليست Palindrome.

تعد هذه المسألة مثالاً ممتازاً لتعلم تقنية Two Pointers.

الطريقة البسيطة: Reverse

يمكن عكس النص ومقارنته بالأصل:

function isPalindrome(value: string): boolean {
  const reversed = value.split("").reverse().join("");
  return value === reversed;
}

التعقيد:

Time: O(n)
Space: O(n)

لأننا ننشئ نسخة جديدة من النص.

Two Pointers

نضع Pointer في بداية النص وآخر في نهايته:

r a c e c a r
↑           ↑
L           R

نقارن القيمتين ثم نتحرك نحو المركز.

left++
right--

إذا ظهر اختلاف واحد فالنتيجة false.

function isPalindrome(value: string): boolean {
  let left = 0;
  let right = value.length - 1;

  while (left < right) {
    if (value[left] !== value[right]) {
      return false;
    }

    left++;
    right--;
  }

  return true;
}

التعقيد:

Time: O(n)
Space: O(1)

تجاهل المسافات والرموز

مثال مشهور:

A man, a plan, a canal: Panama

بعد تحويل الحروف إلى lowercase وإزالة الرموز يصبح:

amanaplanacanalpanama

وهو Palindrome.

يمكن أيضاً تحريك Pointerين وتجاوز الأحرف غير الأبجدية والرقمية مباشرة دون إنشاء String جديد.

الأرقام

أعداد مثل:

121
1221
4554

Palindrome أيضاً.

يمكن تحويل الرقم إلى String أو قلب أرقامه رياضياً ثم المقارنة مع الرقم الأصلي.

function isNumberPalindrome(value: number): boolean {
  if (value < 0) return false;

  const original = value;
  let reversed = 0;

  while (value > 0) {
    const digit = value % 10;
    reversed = reversed * 10 + digit;
    value = Math.floor(value / 10);
  }

  return original === reversed;
}

Recursion

يمكن حل المسألة Recursively أيضاً عن طريق مقارنة الطرفين ثم الانتقال للجزء الداخلي.

لكن هذا يحتاج إلى Call Stack، ولذلك تكون مساحة الذاكرة عادة O(n) مقارنة بـ O(1) في الحل التكراري.

Almost Palindrome

من الأسئلة الشائعة:

هل يمكن جعل النص Palindrome بحذف حرف واحد فقط؟

مثلاً:

abca

عند أول mismatch يمكن تجربة حذف الحرف الأيسر أو الأيمن ثم فحص الجزء المتبقي.

تطبيقات ومشكلات مرتبطة

تظهر فكرة Palindrome في مسائل مثل:

  • Longest Palindromic Substring
  • Palindromic Subsequence
  • Palindrome Partitioning
  • Valid Palindrome
  • Minimum Insertions

كما أنها من أبسط الأمثلة على Two Pointers، وهي تقنية تستخدم أيضاً في Arrays وPair Sum وPartitioning وغيرها.

Case Sensitivity

قد يكون:

Level

غير Palindrome عند المقارنة Case-sensitive، لكنه يصبح:

level

بعد Normalization.

لذلك يجب تحديد قواعد المقارنة مسبقاً.

سؤال مقابلات شائع

قد يُطلب تجاهل المسافات والرموز وحالة الأحرف.

الحل الجيد يستخدم:

Two Pointers
Skip invalid characters
Case-insensitive comparison

بتعقيد:

Time: O(n)
Space: O(1)

حالات خاصة

""        → true
"a"       → true
"aa"      → true
"ab"      → false
"racecar" → true

الخلاصة

Palindrome هو تسلسل متناظر من الجهتين، والطريقة القياسية لفحصه هي Two Pointers.

Time Complexity: O(n)
Space Complexity: O(1)

أهمية المسألة ليست فقط في اكتشاف الكلمات المتناظرة، بل في تعليم التفكير المتناظر وتقنية Two Pointers وإدارة Edge Cases بكفاءة.

في هذه الصفحة
الطريقة البسيطة: ReverseTwo Pointersتجاهل المسافات والرموزالأرقامRecursionAlmost Palindromeتطبيقات ومشكلات مرتبطةCase Sensitivityسؤال مقابلات شائعحالات خاصةالخلاصة

تفاصيل المقال

بيانات النشر ووقت القراءة وعدد المشاهدات.

تاريخ النشر

١٩ أغسطس ٢٠٢٦

آخر تحديث

١٩ أغسطس ٢٠٢٦

وقت القراءة

6 دقيقة قراءة

المشاهدات

0

الكاتب

Arian Soleimanzadeh

المقال السابق

ما هي Longest Common Substring؟ إيجاد أطول جزء متصل مشترك باستخدام Dynamic Programming

المقال التالي

ما الفرق بين B2B CRM وB2C CRM؟ من عملية المبيعات إلى بنية البرمجيات

لنبنِ شيئاً نظيفاً، سريعاً، وجميلاً.

تواصل سريع للتعاون، أو الاستشارة، أو العمل على المنتجات.

تواصل سريعراسلني عبر البريد
آرین سليمان زاده

معرض أعمال شخصي يركز على هندسة الويب الحديثة، وأنظمة الواجهات، ومنتجات الذكاء الاصطناعي العملية — كود نظيف، وتصميم نقي.

روابط سريعة

  • نبذة
  • المدونة
  • المشاريع
  • تواصل

تواصل

  • info@ariansoleimanzadeh.site
  • soleimanzadeh.a.work@gmail.com

التوفر: أيام الأسبوع

عادةً يتم الرد خلال 24 ساعة.

النشرة البريدية

احصل على تحديثات حول المقالات، والمشاريع، والإصدارات الجديدة.

© 2026 ariansoleimanzadeh.site — جميع الحقوق محفوظة.

لينكدإن