أطول طول palindromic حتى الأحداث (مع أحرف مجاورة متميزة باستثناء رسائل المركز 2)

cs.stackexchange https://cs.stackexchange.com/questions/125302

سؤال

تحظى بأسلحة تحتوي على أحرف اللغة الإنجليزية الصغيرة. تحتاج إلى العثور على طول أكبر لاحق ل S الذي يرضي النمط التالي: X1، X2، X3 ... XN، XN، ... X3، X2، X1 حيث XI هي بعض الطابع من S. القيد الوحيد هو أنه لا ينبغي أن تكون أي شخصية مجاورة هي نفسها باستثناء XN، أي XI!= x (i + 1) للجميع 1 <= ن.

المدخلات: السلسلة: S
الإخراج: عدد صحيح: 2N
القيد: 1 <= | S | <= 10 ^ 3

الإدخال عينة 1: "acdbdea"
نموذج الإخراج 1: 4
Explanation: "Adda" هو أطول لاحق بعد النمط المحدد.

الإدخال عينة 2: "abbacdeedc"
نموذج الإخراج 2: 6
Explanation: "CDEEDC" هو أطول لاحق بعد النمط المحدد.

الإدخال العينة 3: "Taker"
الناتج العينة 3: 0
Explanation: لا لاحق يتبع نمط معين.


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

هل كانت مفيدة؟

المحلول

القاعدة الذهبية

هنا هي القاعدة الذهبية للبرمجة الديناميكية.

عندما لا يمكن الجمع بين الحلول ل Subprobroblems الأصغر في حلول إلى مجموعات فرعية أكبر بسبب المعلومات المفقودة، قم بتوسيع المشكلات الفرعية حسب إضافة المعلمات التي تعطي هذه المعلومات المفقودة.


المحاولة الأولى

$ S $ هو سلسلة من $ n $ الحروف أو، $ s [0: n]. $

دع $ l [i] [j] $ يكون طول أطول palindromic لاحقا من $ s [i : J] $ . من السهل معرفة الحالات الأساسية، ومن خلال زيادة $ i $ $ و / أو تقليل $ J $ ، العلاقات المتكررة ل $ l [i] [j] $ .

أضف حالة الطول حتى الآن. دع $ e [j] [j] $ يكون طول أطول طول palindromic حتى الطول التالي ل $ s [i : J] $ . يمكننا معرفة الحالات الأساسية وعلاقات التكرار ل $ e [j] [j] $ ، على غرار تلك الخاصة ب $ l [i] [j] $ .

الآن أضف حالة الحروف المجاورة المتميزة، أي، لا يمكن أن تظهر أي حرف مرتين على التوالي باستثناء الرسالة في المركز. دع $ d [i] [j] $ يكون طول أطول طول الحرف المتميز - الحرف المتميز في الحالتين اللاحق ل $ s [i: j] $ . كما قد لاحظت، لا يمكننا معرفة علاقات التكرار ل $ d [i] [j] $ ، منذ أن تمتد مثل هذه اللاحق إلى أطول قد يؤدي إلى تكرار رسائل.

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

دع $ d [i] [j] [\ lambda] [/ span] يكون طول أطول طول الحرف المتميز-الحرف المتميز في الحمل التالي من $ s [i: j] $ ينتهي في حرف $ \ lambda $ . وهذا هو، وسوف نقوم بحساب $ d [i] [j] [\ text {} a \ text {'}] $ ، $ d [i] [j] [\ text {'} b \ text {'}] $ ، $ d [i] [\ النص {'} c \ text {'}] $ ، $ \ cdots $ ، $ d [i ] [J] [\ text {'} z \ text {'}] $ .

  • الإجابة النهائية هي أكبر من $ \ max_ \ lambda d [0] [n-1] [\ lambda] $ و $ 0 $ .

  • افترض الأول $ \ text {'} a \ text {'} $ في $ S $ في أو بعد $ s [i] $ تظهر في $ s [\ vec {i _ {\ text { '} a \ text {'}}}] $ . لنفترض أول $ \ text {'} a \ text {'} $ في $ S $ يظهر في $ s [\ overleftarrow {j _ text {} a \ text {'}}}] $ قبل $ s [J] $ بحثت إلى الوراء. $ \ vec {i _ {\ text {'} a \ text {'}}} $ أو $ \ overleftarrow {j_ {\ text {'} a \ text {'}}} $ يتم تعيين إلى $ - 1 $ إذا $ \ text {'} a \ text {'} $ غير موجود على التوالي. لدينا، ل $ j \ ge i + 2 $ ،

    $$ D [i] [j] [\ text {'} a \ text {'}]=ادفع {cats} \ MAX (2، 2 + \ MAX _ {\ MU \ not=text {'} a \ text {'}} d [\ vec {i _ {{{{{text {'} a \ text {'}}} + 1] [\ overleftarrow {j _ {\ text {'} a \ text {'}}}] [\ m m]) & \ text {if} 0 \ le \ vec {i _ {\ text {'} a \ text {'} }} \ Lt \ overleftarrow {j _ {\ text {'} a \ text {'}}}، \\ -1 & \ text {خلاف ذلك،} \\ \ نهاية {الحالات} $ حيث $ \ MU $ يعمل عبر جميع الحروف الإنجليزية الصغيرة.

  • القضية الأساسية هو $$ D [i] [i] [\ text {} a \ text {'}]= 0. $

تعميم $ \ text {'} a \ text {'} $ متغير $ \ lambda $ ، يمكننا كتابة العلاقة المتكررة والقضية الأساسية ل $ d [i] [j] [\ lambda] $ .

لاحظ أنه مع معلومات إضافية مجسمة في $ \ Lambda $ المعلمة، فمن السهل استنتاج العلاقة المتكررة.

بينما تكون هذه المحاولة ناجحة، يمكننا أن نفعل أفضل.


المحاولة الثانية

يمكننا تبسيط المشاكل الفرعية.

دع $ f [i] [j] $ يكون طول أطول هذه اللاحق الذي يبدأ في $ s [i] $ وينتهي في

PAN Class="حاوية الرياضيات"> $ s [j] $ . ثم لدينا

$$ f [i] [j]=ادفع {cats} \ MAX (2، 2 + \ MAX _ {\ m mu \ not= s [i]} f [\ vec {i_ \ mu}] [\ overleftarrow {j_ \ mu}]) & \ text {if} s [i]= S [J]، \\ -1 & \ text {خلاف ذلك،} \\ \ نهاية {الحالات} $ حيث $ - 1 دولار تقف ل "غير موجود". لجميع الأحرف الإنجليزية الصغيرة $ \ MU $ ، $ s [\ vec {i_ \ mu}] $ هو أول $ \ mu $ يظهر بعد $ s [i] $ ، و $ s [\ overleftarrow {j_ \ mu}] $ هو أول $ \ mu $ يظهر قبل $ S [J] $ بحثت إلى الوراء. إذا لم يتم العثور على أحدهم، فإن مصطلح $ f [\ vec {i_ \ mu}] [\ overleftarrow {j_ \ mu}] $ يتم تجاهلها.

الإجابة النهائية هي أكبر من $ \ max_ {i، j} f [i] [j] $ و 0.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى cs.stackexchange
scroll top