מסלול אותיות מקסימלי במערך דו-ממדי

נתון מערך דו-ממדי mat, שערכיו הם תווים (char). כמו כן נתונה מחרוזת תווים pattern.

נגדיר: מסלול-אותיות (letter-path) במערך אם הוא מקיים את התנאים הבאים:

  1. המסלול מתחיל בתא הראשון במערך - שורה ראשונה ועמודה ראשונה.
  2. אפשר לעבור מתא אחד לשני רק אם הוא שכן שלו מימין, משמאל, למעלה או למטה. לא באלכסון.
  3. אפשר ללכת לתא רק אם גם התא הבא מכיל תו שהוא אחד מהתווים במחרוזת pattern.
  4. המסלול לא יכול לחזור לתא בו הוא היה כבר!

כתבו שתי שיטות רקורסיביות:

  • lengthPath המקבלת מערך דו-ממדי mat מלא בתווים, ומחרוזת תווים pattern. שמחזירה את אורכו של מסלול האותיות הארוך ביותר שיש במערך.

אם בתא הראשון במערך (שורה הראשונה ועמודה ראשונה) מופיע תו שלא נמצא ב-pattern, יוחזר הערך 0.

לדוגמה, נניח שהמחרוזת pattern היא "abc", במערך mat להלן מסומן מסלול-אותיות באורך מקסימלי - 5.

 012345
0acbc@a
1bxzcsa
2?cd*cd
3bcagbb
4c2x+bc

שימו לב, במערך יש עוד מסלול-אותיות באורך 2 (a-b), אבל הוא קצר יותר מהמסלול המסומן.

 

  • maxPath המקבלת מערך דו-ממדי mat מלא בתווים, ומחרוזת תווים pattern. נגדיר שמסלול האותיות יכול להתחיל בכל תא במערך, ולא דווקא בתא הראשון. השיטה מחזירה את אורכו של מסלול האותיות הארוך ביותר שיש במערך. אם במערך לא מופיע תו שנמצא ב-pattern, יוחזר הערך 0.

לדוגמה, נניח שהמחרוזת pattern היא "abc", במערך mat להלן מסומן מסלול-אותיות באורך מקסימלי - 11.

שימו לב, במערך יש עוד 2 מסלולי-אותיות באורך מקסימלי 11 (שניהם מתחילים בתא שבשורה האחרונה ובעמודה הראשונה).

  1. c-b-c-a-b-b-c-b-b-c-b
  2. c-b-c-c-b-b-c-b-b-c-b
 012345
0ades@a
13azasa
2?cbbcd
3bca8bb
4c2x+bc

השתמשו בשיטה lengthPath.

השיטות צריכות להיות רקורסיביות ללא שימוש בלולאות כלל. כך גם כל שיטות העזר (אם תכתבו) לא יכולות להכיל לולאות.

אילוצים:
  • המטריצה אינה null ואינה ריקה.
  • מספר העמודות בכל השורות שווה (כלומר, המטריצה היא מלבנית).
  • המחרוזת אינה null ואינה ריקה.
  • מותר לשנות את המערך במהלך השיטה, אבל בסופה הוא צריך לחזור למצבו המקורי.
דוגמה 1:
קלט:
mat =
[['a', 'd', 'e', 's', '@', 'a'],
 ['3', 'a', 'z', 'a', 's', 'a'],
 ['?', 'c', 'b', 'b', 'c', 'd'],
 ['b', 'c', 'a', '8', 'b', 'b'],
 ['c', '2', 'x', '+', 'b', 'c']],
pattern = "abc"
פלט:
11

הסבר: המסלול הארוך ביותר שנמצא הוא באורך 11.

דוגמה 2:
קלט:
mat =
[['x', 'y', 'z'],
 ['a', 'b', 'c'],
 ['d', 'e', 'f']],
pattern = "xyz"
פלט:
3

הסבר: המסלול הארוך ביותר שנמצא הוא באורך 3.

דוגמה 3:
קלט:
mat = 
[['a', 'b'],
 ['b', 'a']],
pattern = "ab"
פלט:
4

הסבר: המסלול הארוך ביותר שנמצא הוא באורך 4.

דוגמה 4:
קלט:
mat =
[['a', 'b', 'c'],
 ['c', 'b', 'a'],
 ['a', 'c', 'b']],
pattern = "abc"
פלט:
9

הסבר: המסלול הארוך ביותר שנמצא הוא באורך 9.

דוגמה 5:
קלט:
mat =
[['a', 'b', 'c'],
 ['d', 'e', 'f'],
 ['g', 'h', 'i']],
pattern = "xyz"
פלט:
0

הסבר: אין תווים במערך שמתאימים לתבנית.

דוגמה 6:
קלט:
mat =
[['a', 'b', 'c', 'd'],
 ['e', 'f', 'g', 'h'],
 ['i', 'j', 'k', 'l'],
 ['m', 'n', 'o', 'p']],
pattern = "mnop"
פלט:
4

הסבר: המסלול הארוך ביותר שנמצא הוא באורך 4.

דוגמה 7:
קלט:
mat =
[['a', 'b', 'c'],
 ['b', 'c', 'a'],
 ['c', 'a', 'b']],
pattern = "abc"
פלט:
9

הסבר: המסלול הארוך ביותר שנמצא הוא באורך 9.

Loading...
נשמרLn 1, Col 1

קלט:

mat =
[['a', 'd', 'e', 's', '@', 'a'],
 ['3', 'a', 'z', 'a', 's', 'a'],
 ['?', 'c', 'b', 'b', 'c', 'd'],
 ['b', 'c', 'a', '8', 'b', 'b'],
 ['c', '2', 'x', '+', 'b', 'c']],
pattern = "abc"

הפלט המבוקש:

11