Menu
CoddyTech

Longest Common Substring

בינוניתכנון דינמיpython iconjava iconcpp iconc iconjs icon+10

מקבלים שתי מחרוזות, s1 ו־s2. תת־מחרוזת היא רצף רציף של אותיות שנלקח ממחרוזת, כמו ork מתוך clockwork. מצאו את תת־המחרוזת הארוכה ביותר המשותפת ל־s1 ול־s2 והחזירו את האורך שלה. כשאין אות שמופיעה בשתי המחרוזות, התשובה היא 0.

פונקציה

longestCommonSubstring(s1: string, s2: string) → integer
s1string
המחרוזת הראשונה
s2string
המחרוזת השנייה
מחזירהinteger
האורך של רצף האותיות הארוך ביותר שנמצא בשתי המחרוזות

אילוצים

  • 1 ≤ s1.length ≤ 1000
  • 1 ≤ s2.length ≤ 1000
  • s1 ו-s2 מורכבים מאותיות אנגליות קטנות.

דוגמאות

קלט
s1 = "clockwork"s2 = "workshop"
פלט
4
הסבר
work מסיימת את clockwork ומתחילה את workshop, ולכן היא מחרוזת משנה משותפת באורך 4, ולא מופיע בלוק ארוך יותר בשניהם.
challenge icon

שאלת המשך

האם אפשר לבדוק אם קיימת תת־מחרוזת משותפת באורך נתון L בזמן של בערך O(n + m) באמצעות גיבוב מתגלגל, ואז לבצע חיפוש בינארי על L?

איפוס הקוד
def longestCommonSubstring(s1, s2):
    # כתבו כאן קוד

בדיקה #1

בדיקה #2

בדיקה #3

ארגומנטים

s1 = "clockwork"
s2 = "workshop"

הפלט הצפוי

4