تعقيد الوقت: في أسوأ الحالات، نقوم بالتكرار على Min(str1,str2) ونحتاج إلى إعادة إنشاء str1 وstr2 بحيث يكون (str1.length str2.length) لذا فإن التعقيد الزمني الإجمالي سيكون O(min(str1,str2) * (str1.length str2.length))
تعقيد المساحة: O(1) حيث أننا لا نحتاج إلى أي مساحة إضافية.
","image":"http://www.luping.net/uploads/20241012/1728725766670a43065f5b5.jpg","datePublished":"2024-11-07T22:30:30+08:00","dateModified":"2024-11-07T22:30:30+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}بالنسبة إلى سلسلتين s وt، نقول "t يقسم s" إذا وفقط إذا كانت s = t t t ... t t (أي، t متسلسلة مع نفسها مرة واحدة أو أكثر).
بالنظر إلى سلسلتين str1 وstr2، قم بإرجاع أكبر سلسلة x بحيث تقسم x كلا من str1 وstr2.
على الرغم من أن رمز leetcode قد وضع علامة عليها على أنها مشكلة سهلة، إلا أنني يجب أن أعترف أنني وجدت صعوبة في التوصل إلى حل على الفور.
اسمح لي بمراجعة حالات الاختبار المقدمة من leetcode ومراجعتها لشرح حيرتي.
الإدخال: str1 = "ABCABC"، str2 = "ABC"
الإخراج: "ABC"الإدخال: str1 = "ABABAB"، str2 = "ABAB"
الإخراج: "AB"
من بيان المشكلة وحالة الاختبار 1، حددت أننا بحاجة إلى إخراج أكبر سلسلة ("ABC") متسلسل يمكننا الحصول على كلتا السلسلتين. (السلسلة الافتراضية "ABC" === str2 و"ABC" "ABC" === str1).
ومع ذلك، عند النظر إلى حالة الاختبار 2، أدركت بسرعة أن فهمي لم يكن صحيحًا لأنه وفقًا لذلك يجب أن أخرج "ABAB" لأن هذه هي أطول سلسلة يمكنني من خلالها إنشاء كلا السلسلتين. لكنني قفزت إلى البرمجة وبدأت في رسم حل. (خطأ مبتدئ؟)
لم أتمكن من رسم حل إلا عندما:
كما ترون فشل الحل الخاص بي للسلاسل حيث يحتوي str1 على str2 ولكنه يحتوي أيضًا على بعض الأحرف الإضافية الأخرى. مخالفة شرط أن s = t t ... t t.
اضطررت إلى اللجوء إلى حل neetcode للحصول على المساعدة. لقد فهمت مشاكلي بسرعة:
كنت أجد GCD لطول السلسلة، وليس السلسلة نفسها. أحتاج إلى العثور على سلسلة حيث يمكنني من خلال تكرار تلك السلاسل إنشاء كلا السلسلتين دون أي أحرف متبقية.
أدركت لماذا لا يمكن أن يكون "ABAB" هو الحل لحالة الاختبار 2:
نحن بحاجة إلى العثور على x بحيث يقسم كلا السلاسل بالتساوي. لذا، باستخدام "ABABAB" كسلسلة، يمكنك إنشاء str2 بالكامل ولكن بالنسبة إلى str1 ينتهي بك الأمر بـ "ABABABAB". ينتهي بك الأمر مع 2 "AB" زائدين ولا يمكنك القول أنك قمت بإنشاء str1 بالكامل من خلال الجمع بين x.
طول "ABAB" 4 وطول "ABABAB" 6. GCD للسلسلتين = 2. ومن ثم يجب أن يكون الإخراج سلسلة بطول 2.
تعقيد الوقت: في أسوأ الحالات، نقوم بالتكرار على Min(str1,str2) ونحتاج إلى إعادة إنشاء str1 وstr2 بحيث يكون (str1.length str2.length) لذا فإن التعقيد الزمني الإجمالي سيكون O(min(str1,str2) * (str1.length str2.length))
تعقيد المساحة: O(1) حيث أننا لا نحتاج إلى أي مساحة إضافية.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3