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

1. הקדמה

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

פלינדרום הוא מילה, ביטוי, מספר או רצפים אחרים של תווים שקוראים אותו לאחור כמו קדימה, כגון "גברת" או "מכונית מירוץ".

2. פתרונות

בחלקים הבאים נבחן את הדרכים השונות לבדוק אם נתון חוּט הוא פלינדרום או לא.

2.1. גישה פשוטה

אנו יכולים להתחיל בו זמנית לחזור על הנתון חוּט קדימה ואחורה, דמות אחת בכל פעם. אם יש התאמה הלולאה ממשיכה; אחרת, הלולאה יוצאת:

בוליאני ציבורי isPalindrome (טקסט מחרוזת) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); אורך int = clean.length (); int קדימה = 0; int לאחור = אורך - 1; ואילו (אחורה> קדימה) {char forwardChar = clean.charAt (קדימה ++); char backwardChar = clean.charAt (אחורה--); אם (forwardChar! = backwardChar) להחזיר שקר; } להחזיר נכון; }

2.2. היפוך המיתר

יש כמה יישומים שונים המתאימים למקרה השימוש הזה: אנו יכולים להשתמש בשיטות ה- API מ StringBuilder ו StringBuffer שיעורים בעת בדיקת פליינדרומות, או שנוכל להפוך את חוּט בלי השיעורים האלה.

בואו נסתכל תחילה על יישומי הקוד ללא ממשקי ה- API העוזרים:

בוליאני ציבורי isPalindromeReverseTheString (טקסט מחרוזת) {StringBuilder הפוך = StringBuilder חדש (); מחרוזת נקייה = text.replaceAll ("\ s +", "") .toLowerCase (); char [] רגיל = clean.toCharArray (); עבור (int i = plain.length - 1; i> = 0; i--) {reverse.append (רגיל [i]); } להחזיר (reverse.toString ()). שווה (נקי); }

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

לבסוף, אנו בודקים שוויון בין הנתון חוּט והפוך חוּט.

ניתן להשיג את אותה התנהגות בשיטות API.

בואו נראה הפגנה מהירה:

בוליאני ציבורי isPalindromeUsingStringBuilder (טקסט מחרוזת) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuilder רגיל = StringBuilder חדש (נקי); StringBuilder הפוך = plain.reverse (); return (reverse.toString ()). שווה (נקי); } בוליאני ציבורי isPalindromeUsingStringBuffer (טקסט מחרוזת) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); StringBuffer רגיל = StringBuffer חדש (נקי); StringBuffer הפוך = plain.reverse (); return (reverse.toString ()). שווה (נקי); }

בקטע הקוד אנו קוראים את ה- לַהֲפוֹך() שיטה מה- StringBuilder ו StringBuffer API כדי להפוך את הנתון חוּט ולבדוק לשוויון.

2.3. באמצעות זרם ממשק API

אנחנו יכולים גם להשתמש ב- IntStream כדי לתת מענה:

ציבורי בוליאני הוא PalindromeUsingIntStream (טקסט מחרוזת) {String temp = text.replaceAll ("\ s +", "") .toLowerCase (); להחזיר IntStream.range (0, temp.length () / 2) .noneMatch (i -> temp.charAt (i)! = temp.charAt (temp.length () - i - 1)); }

בקטע המופיע למעלה, אנו מוודאים שאף אחד מזוגות הדמויות מכל קצה הקצה חוּט ממלא את לְבַסֵס מַצָב.

2.4. באמצעות רקורסיה

רקורסיה היא שיטה פופולרית מאוד לפתור בעיות מסוג זה. בדוגמה שהודגמה אנו חוזרים על רקע רקוב את הנתון חוּט ובדוק כדי לברר אם מדובר בפלינדרום או לא:

בוליאני ציבורי הואPalindromeRecursive (טקסט מחרוזת) {String clean = text.replaceAll ("\ s +", "") .toLowerCase (); החזר רקורסיבי Palindrome (נקי, 0, נקי.אורך () - 1); } בוליאני פרטי רקורסיבי Palindrome (טקסט מחרוזת, int קדימה, int אחורה) {if (קדימה == אחורה) {return true; } אם ((text.charAt (קדימה))! = (text.charAt (אחורה))) {return false; } אם (קדימה <אחורה + 1) {חזור רקורסיבי Palindrome (טקסט, קדימה + 1, אחורה - 1); } להחזיר נכון; }

3. מסקנה

במדריך מהיר זה ראינו כיצד לברר האם נתון חוּט הוא פלינדרום או לא.

כמו תמיד, דוגמאות הקוד למאמר זה זמינות ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found