"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > سجلات ترميز الآلة الكاتبة: عكس الكلمات في سلسلة

سجلات ترميز الآلة الكاتبة: عكس الكلمات في سلسلة

تم النشر بتاريخ 2024-08-02
تصفح:478

Typescript Coding Chronicles: Reverse Words in a String

عرض المشكلة:

نظرًا لسلسلة الإدخال، قم بعكس ترتيب الكلمات. يتم تعريف الكلمة على أنها سلسلة من الأحرف غير الفضائية. سيتم فصل الكلمات الموجودة في s بمسافة واحدة على الأقل. إرجاع سلسلة من الكلمات بترتيب عكسي ومتسلسلة بمسافة واحدة.

لاحظ أن s قد تحتوي على مسافات بادئة أو لاحقة أو مسافات متعددة بين كلمتين. يجب أن تحتوي السلسلة التي تم إرجاعها على مسافة واحدة فقط تفصل بين الكلمات. لا تقم بتضمين أي مسافات إضافية.

مثال 1:

  • الإدخال: s = "السماء زرقاء"
  • الإخراج: "السماء الزرقاء هي السماء"

مثال 2:

  • الإدخال: s = "مرحبا بالعالم"
  • الإخراج: "مرحبا بالعالم"
  • شرح: يجب ألا تحتوي السلسلة المعكوسة على مسافات بادئة أو لاحقة.

مثال 3:

  • الإدخال: s = "مثال جيد"
  • الإخراج: "مثال جيد أ"
  • شرح: أنت بحاجة إلى تقليل المسافات المتعددة بين كلمتين إلى مسافة واحدة في السلسلة المعكوسة.

قيود:

  • 1
  • يحتوي s على أحرف إنجليزية (أحرف كبيرة وصغيرة) وأرقام ومسافات ' '.
  • هناك كلمة واحدة على الأقل في حرف s.

عملية التفكير الأولية:

لحل هذه المشكلة علينا:

  1. تقسيم السلسلة إلى كلمات.
  2. عكس ترتيب الكلمات.
  3. ضم الكلمات معًا مرة أخرى مع ترك مسافة واحدة بين كل كلمة.

الحل الأساسي:

شفرة:

function reverseWordsBruteForce(s: string): string {
    // Split the string by spaces and filter out empty strings
    let words = s.trim().split(/\s /);

    // Reverse the array of words
    words.reverse();

    // Join the words with a single space
    return words.join(' ');
}

تحليل تعقيد الوقت:

  • تعقيد الوقت: O(n)، حيث n هو طول السلسلة. يستغرق التقسيم والعكس والانضمام وقتًا خطيًا.
  • تعقيد الفضاء: O(n)، حيث n هو طول السلسلة. نقوم بتخزين الكلمات في مصفوفة والنتيجة النهائية في سلسلة.

محددات:

هذا الحل فعال نظرا للقيود. ومع ذلك، فإنه يستخدم مساحة إضافية لمجموعة الكلمات.

الحل الأمثل:

إذا كان نوع بيانات السلسلة قابلاً للتغيير ونحتاج إلى حله في مكانه باستخدام مساحة إضافية O(1)، فيمكننا استخدام تقنية المؤشرين لعكس الكلمات داخل السلسلة الأصلية.

شفرة:

function reverseWordsOptimized(s: string): string {
    // Trim the string and convert it to an array of characters
    let chars = s.trim().split('');

    // Helper function to reverse a portion of the array in place
    function reverse(arr: string[], left: number, right: number) {
        while (left 



تحليل تعقيد الوقت:

  • تعقيد الوقت: O(n)، حيث n هو طول السلسلة. تتم معالجة كل حرف عدد ثابت من المرات.
  • تعقيد المساحة: O(1)، حيث أننا نقوم بتعديل المصفوفة الموجودة في مكانها واستخدام مقدار ثابت فقط من المساحة الإضافية.

التحسينات على الحل الأساسي:

  • يعمل الحل الأمثل على تقليل تعقيد المساحة عن طريق إجراء عمليات في مكانها على مجموعة من الأحرف.

حالات الحافة والاختبار:

حالات الحافة:

  1. تحتوي السلسلة على مسافات بادئة وزائدة.
  2. تحتوي السلسلة على مسافات متعددة بين الكلمات.
  3. تحتوي السلسلة على كلمة واحدة فقط.
  4. طول السلسلة عند الحد الأدنى أو الأقصى.

حالات تجريبية:

console.log(reverseWordsBruteForce("the sky is blue")); // "blue is sky the"
console.log(reverseWordsBruteForce("  hello world  ")); // "world hello"
console.log(reverseWordsBruteForce("a good   example")); // "example good a"
console.log(reverseWordsBruteForce("singleWord")); // "singleWord"
console.log(reverseWordsBruteForce("   ")); // ""

console.log(reverseWordsOptimized("the sky is blue")); // "blue is sky the"
console.log(reverseWordsOptimized("  hello world  ")); // "world hello"
console.log(reverseWordsOptimized("a good   example")); // "example good a"
console.log(reverseWordsOptimized("singleWord")); // "singleWord"
console.log(reverseWordsOptimized("   ")); // ""

الاستراتيجيات العامة لحل المشكلات:

  1. فهم المشكلة: اقرأ بيان المشكلة بعناية لفهم المتطلبات والقيود.
  2. تحديد العمليات الرئيسية: تحديد العمليات الرئيسية المطلوبة، مثل تقسيم الكلمات وعكسها وضمها.
  3. تحسين سهولة القراءة: استخدم منطقًا واضحًا وموجزًا ​​لضمان سهولة متابعة التعليمات البرمجية.
  4. اختبار شامل: اختبر الحل مع حالات مختلفة، بما في ذلك حالات الحافة، للتأكد من صحته.

تحديد المشاكل المشابهة:

  1. التلاعب بالسلسلة:

    • المشاكل التي تحتاج فيها إلى تعديل السلاسل بناءً على شروط محددة.
    • مثال: عكس ترتيب الأحرف في كل كلمة من الجملة.
  2. تقنية المؤشرين:

    • المشكلات التي يمكن أن يساعد فيها استخدام مؤشرين في تحسين الحل.
    • مثال: إزالة التكرارات من مصفوفة مرتبة.
  3. الخوارزميات الموضعية:

    • المشاكل التي تتطلب تنفيذ العمليات في مكانها مع مساحة إضافية محدودة.
    • مثال: تدوير مصفوفة إلى اليمين بخطوات k.

خاتمة:

  • يمكن حل مشكلة عكس الكلمات في السلسلة بكفاءة باستخدام أسلوب القوة الغاشمة والأسلوب الموضعي الأمثل.
  • إن فهم المشكلة وتقسيمها إلى أجزاء يمكن التحكم فيها أمر بالغ الأهمية.
  • يضمن استخدام المنطق الواضح وتحسين سهولة القراءة سهولة متابعة الحل.
  • يضمن الاختبار باستخدام حالات الحافة المختلفة المتانة.
  • يمكن أن يساعد التعرف على أنماط المشكلات في تطبيق حلول مماثلة لتحديات أخرى.

من خلال ممارسة مثل هذه المشكلات والاستراتيجيات، يمكنك تحسين مهاراتك في حل المشكلات والاستعداد بشكل أفضل لمواجهة تحديات البرمجة المختلفة.

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/__zamora__/typescript-coding-chronicles-reverse-words-in-a-string-44no?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] للحذف هو - هي
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3