בדוק אם מחרוזת היא פלינדרום ב- Java וב- Python

במהלך השנים, בדיקת אם מחרוזת היא פלינדרום או לא הפכה לשאלת ראיון קידוד קלאסי. הסיבה לכך היא שמדובר במושגים סביב מניפולציה והשוואה במחרוזות ואפילו לולאות בהתאם ליישום. והשאלה אינה ארוכה ולכן ניתן להשלים אותה במסגרת מגבלות הזמן של הראיון. מאמר זה כולל הטמעה לבדיקה אם מחרוזת היא palindrome בג'אווה ובפייתון.

מהו פלינדרום?

על פי synonym.com, ההגדרה של פלינדרום היא "מילה או ביטוי שקוראים אותו לאחור כמו קדימה." בעיקרון, המשמעות היא שאם אתה כותב את המילה או הביטוי לאחור, זה יהיה בדיוק כמו כשהיה קדימה. לדוגמה, אבא ואמא הם פלינדרומים ואבא ואמא לא. המילה "פלינדרום" מגיעה משתי מילות שורש יווניות, "פאלין" שמשמעותן שוב ו"דרומוס "שמשמעותה דרך או כיוון. טבעה אותו המחזאי האנגלי בן ג'ונסון במאה ה -17.

פִּתָרוֹן

  • הדרך הנפוצה והקלה ביותר לפתור את השאלה היא על ידי היפוך מחרוזת תחילה ואז השוואה עם המחרוזת המקורית. גישה זו תהיה O (n) בסימון big-O מכיוון שהיפוך המחרוזת הוא O (n).
  • דרך אחרת תהיה להתחיל להשוות תווים מההתחלה והסוף ולהמשיך עד שתגיע לאמצע. לגישה זו מורכבות זמן של O (n / 2) אך בסימון big-O היא עדיין תהיה O (n). אך היתרון בגישה זו הוא שאתה יכול להחזיר False ברגע שאתה נתקל בחוסר ההתאמה הראשון, ואילו בגישה הראשונה, מכיוון שהיפוך מחרוזת הוא הצעד הראשון מורכבות הזמן תמיד תהיה O (n).

פלינדרום ביישום פיתון

להלן הקוד לבדיקה אם מחרוזת היא פלינדרום בפייתון.

def is_palindrome (s): "" "מחזיר נכון אם טיעון נתון s הוא palindrome אחר טענה שקרית" "(isinstance (s, str))," טענה s אינה מסוג "# טען אם הטיעון הנתון הוא מסוגו החזר s [:: - 1] == s # השווה את הפוך המחרוזת לעצמו אם __name __ == "__ main__": הדפס (is_palindrome ("אבא"))def is_palindrome (word): "" "משווה את התווים אחד-אחד מההתחלה והסוף ומחזיר False כאשר חוסר ההתאמה הראשון מתרחש, אחרת מחזיר True" "" i1, i2 = 0, len (word) -1 # אתחל הסמנים בזמן i2> i1: אם מילה [i1]! = מילה [i2]: # אם התווים לא תואמים אז אין צורך להמשיך הלאה להחזיר False i1 + = 1 i2- = 1 החזר נכון אם __name __ == "__ main__ ": הדפס (is_palindrome (" אבא "))

Palindrome ביישום Java

להלן הקוד לבדיקה אם מחרוזת היא palindrome ב- Java.

class class Palindrome {Public static public Boolean isPalindrome (String str) {StringBuilder sb = StringBuilder new (str); // ל- StringBuilder יש להחזיר שיטה הפוכה sb.reverse (). ToString (). שווה ל- (str); // השווה את היפוך המחרוזת עם עצמה} ראשי ריק סטטי ציבורי (String args []) {בוליאני b = isPalindrome ("אבא"); System.out.println (b); }}מעמד ציבורי Palindrome {בוליאני סטטי ציבורי isPalindrome (String str) {int i1 = 0; int i2 = str.length () - 1; בעוד (i2> i1) {אם (str.charAt (i1)! = str.charAt (i2)) {return false; } i1 ++; i2--; } להחזיר נכון; } ראשי סטטי ציבורי ריק (מחרוזת טוענת []) {בוליאני b = isPalindrome ("אבא"); System.out.println (b); }}