שלחתי את הכלי הפוך מחרוזת על Toolz.dev חושב שזה היה הדבר הכי משעמם I & #39;d לבנות כל החודש. It's split('').reverse().join(''). מה יכול להשתבש. ואז הדבקתי את הטקסט לדוגמה I'd כתוב - שבגלל שהרגשתי חמוד, הסתיים ב-"יוניקוד: . ." - והפלט חזר עם שני האימוג'י שהפכו לקופסאות משובשות. 🌍🚀 הפך \ude80🜍\ud83c. התווים הסיניים התהפכו בצורה מושלמת. האימוג'י התנפץ.
ההפתעה הזו בת חמש דקות היא למעשה הדבר הכי שימושי שאני יכול ללמד אותך על היפוך מחרוזות, אז כל המדריך הזה בנוי סביבו היפוך טקסט נשמע טריוויאלי, ועבור ASCII פשוט זה. ברגע שאתה מציג אימוג'י, דגלים או תווים מסוימים עם מבטא, " הפוך את המחרוזת" מפסיק לקבל תשובה אחת ברורה - ורוב הכלים, כולל זה, בוחרים בשקט את התשובה ששוברת אותם.
ה חוט הפוך כלי עושה דבר אחד: הוא הופך תווים, באופן מיידי, תוך כדי הקלדה אין מצבים להגדרה, אין הרשמה, והטקסט שלך לעולם לא עוזב את הדפדפן תן לי להראות לך בדיוק מה הוא עושה, היכן הוא נשבר וכיצד להפוך טקסט בצורה נכונה בקוד אמיתי כאשר השבירה היא 't מקובל.
TL;DR: הדבק טקסט לתוך חוט הפוך וזה הופך את סדר הדמויות בשידור חי -
HelloהופךolleH. It's מצב היפוך תווים בודד (ללא מצבי מילה או שורה נפרדים), הוא מתעדכן אוטומטית תוך כדי הקלדה, ותוכל להעתיק או להוריד את התוצאה. It's מושלם לבדיקות פלינדרום, חידות מהירות ואימות תשובות לראיונות. Heads up: כמו JavaScript רגילsplit(''), זה שובר אימוג'י ודגלים כי זה מתפצל לפי יחידת קוד. טקסט רגיל ו-CJK הפוך בסדר. חבר אותו עם ה מַגִישׁ או מונה מילים לעבודת טקסט מהירה.
מה בעצם עושה הכלי היפוך מחרוזת?
פעולה אחת בדיוק: היא הופכת את סדר התווים התו האחרון הופך לראשון, וכן הלאה.
קלט: Hello World
פלט: dlroW olleH
מתחת למכסה המנוע ההיגיון הוא באמת שורה אחת - אותה שורה you'd כתוב בראיון JavaScript:
text.split('').reverse().join('')
There's no " reverse words" or " reverse lines" mode hiding in a menu.Filmer draft of this page described character, word, jeention, and line modes; that was aspirational, not real הכלי הופך תווים, נקודה.It מעדכן אוטומטית תוך כדי הקלדה, כך שאתה רואה את התוצאה ההפוכה בשידור חי, וזה נותן לך את ספירת התווים והשורות של קלט ופלט כאחד. אתה יכול להדביק טקסט, להעלות קובץ טקסט, לטעון מכתובת URL, ואז להעתיק את התוצאה או להוריד אותה בתור א .txt.
אם אתה רוצה ספציפית היפוך סדר מילים (Hello World → World Hello), you'd לעשות את זה בקוד עם split(' ').reverse().join(' ')- I' יציג את הקטעים למטה.
למה אימוג'ים נשברים כשאתה הופך אותם?
זה החלק ששווה להבין, כי הוא מסביר מחלקה שלמה של באגים.
מחרוזות JavaScript הן רצפים של UTF-16 יחידות קוד, לא "characters" במובן האנושי רוב התווים היומיומיים - אותיות באנגלית, ספרות, סימני פיסוק, ואפילו תווים סיניים, יפניים וקוריאניים - מתאימים ליחידת קוד אחת של 16 סיביות split('') חותך ביניהם בצורה נקייה והיפוך עובד:
'你好世界'.split('').reverse().join('') // → '界世好你' ✅
אבל אימוג'י, רצפי דגלים וכמה סמלים חיים בחוץ טווח זה ומאוחסנים כ זוגות פונדקאים- שתי יחידות קוד שמשמעותן רק משהו ביחד. split('') חותך אותם בשמחה לשניים, והיפוך מערבב את החצאים לשטויות:
'AB🌍🚀'.split('').reverse().join('') // → mojibake, the emoji shatter ❌
שילוב סימנים הם המלכודת השנייה ניתן לאחסן אות מודגשת בשתי דרכים: כנקודת קוד אחת מורכבת מראש (é), או כאות בסיס בתוספת מבטא שילוב נפרד (e + . ́). הגרסה המורכבת מראש מתהפכת בסדר. הגרסה המפורקת מנתקת את המבטא, שצף ונוחת על האות הלא נכונה לאחר היפוך.
אז הכלל הישר לכלי הזה: טקסט רגיל, ספרות, סימני פיסוק ו-CJK הופכים כהלכה; אימוג'י, אימוג'י דגל והדגשים מפורקים ישברו. That's לא פגם ייחודי Toolz.dev - it's מה split('') עושה בכל מקום, והרבה " reverse string" אתרים מתנהגים באופן זהה. השארתי את הגרסה הנאיבית במקום בכוונה כי היא ' מהירה, שקופה ותואמת למה שרוב האנשים מתכוונים כשהם אומרים " הפוך את זה," אבל מגיע לך לדעת את היתרון.
איך הופכים מחרוזת בצורה נכונה בקוד?
אם אתה ' כותבים קוד אמיתי וענייני Unicode, כאן ' הוא הסולם מתמים לנכון.
רמה 1 - נאיבית (מה הכלי עושה): שובר אימוג'י.
str.split('').reverse().join('')
רמה 2 - מפעיל פריסה: חוזר לפי קוד נקודה, אז זה שומר על רוב האימוג'י שלם (זוגות פונדקאים נשארים ביחד). עדיין שובר סימני שילוב מפורקים ורצפי אימוג'י מרובים כמו דגלים.
[...str].reverse().join('')
רמה 3 - מודע לגרפמה: התייחס לכל "דמות" הנתפסים על ידי המשתמש; כאטומי. זו הגישה הנכונה באמת.
const seg = new Intl.Segmenter('en', { granularity: 'grapheme' });
[...seg.segment(str)].map(s => s.segment).reverse().join('');
Intl.Segmenter מטפל באימוג'י, דגלים, משנה גווני עור ושילוב סימנים כראוי. It's הגרסה I'd משלוח בייצור אם היפוך טקסט משתמש עם אימוג'י היה דרישה אמיתית.
Here's אותה פעולה בין שפות, לתרגול ראיונות והתייחסות:
# Python — [::-1] works by code point, similar to JS spread
reversed_str = original[::-1]
words_reversed = ' '.join(original.split()[::-1])
// Java — StringBuilder.reverse() is code-unit based (same emoji caveat)
String reversed = new StringBuilder(original).reverse().toString();
// Go — []rune iterates by code point, safer than byte reversal
runes := []rune(original)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
reversed := string(runes)
// PHP — strrev() is byte-based and mangles any multi-byte UTF-8
$reversed = strrev($original); // breaks UTF-8
שימו לב לתבנית: כמעט כל שפה's "obvious" הפוך מבוסס על יחידת קוד או בתים וחולק את אותה חולשת Unicode. הגעה לאפשרות המודעת לגרפמה היא היוצא מן הכלל, לא ברירת המחדל.
בשביל מה בעצם היפוך מיתרים טוב?
מעבר להיותו חימום הראיון הקנוני, הוא מרוויח את השמירה שלו בכמה מקומות.
בדיקות פלינדרום. הפוך את המחרוזת והשווה למקור - אם הם תואמים, it's a palindrome. לְנַסוֹת racecar, level, או 12321 בכלי ולצפות הפלט לחזור זהה. For ביטוי palindromes כמו "A man a plan a canal Panama," חללי רצועה ומארז ראשון.
אימות קוד משלך. כאשר אתה & #39; טוחנים בעיות היפוך בסגנון LeetCode, הדבק את הפלט הצפוי שלך בכלי כדי לבדוק זאת תוך שנייה. זה ' הוא אורקל מהיר למקרה היפוך תווים.
חידות מהירות וטקסט שובב. הודעות לאחור, משחקי מילים, פוסטים חברתיים במראה - הימורים נמוכים והיפוך הוא הפוך משלו, אז היפוך פעמיים נותן לך את הגב המקורי. המאפיין הזה שימושי לבדיקה: הפוך, הפוך שוב, אשר אותך 're home.
דבר אחד ל לא השתמש בו עבור: אבטחה. היפוך הוא טריק מסיבה, לא הצפנה - זה 's בוטל באופן טריוויאלי. זה מופיע ב- "obfuscation" מתחילים; מדריכים, אך לעולם אל תתייחס לטקסט הפוך כמוגן.
| סוג היפוך | דוגמה | בכלי? | קטע קוד |
|---|---|---|---|
| דמויות | abc → cba |
כן (המצב היחיד) | [...s].reverse().join('') |
| מילים | a b c → c b a |
לא - תעשה את זה בקוד | s.split(' ').reverse().join(' ') |
| קווים | סדר קו התהפך | לא - תעשה את זה בקוד | s.split('\n').reverse().join('\n') |
| בטוח לגרפם | אימוג'י נשארים שלמים | לא - צריך Intl.Segmenter | ראה רמה 3 למעלה |
גישת שתי הנקודות, אם אתה ' מתכוננים לראיונות
הסיבה שמראיינים אוהבים את השאלה הזו היא שהתשובה האלגנטית ' אל תשתמש בהיפוך מובנה בכלל. אתה הולך שני מצביעים אחד כלפי השני ומחליף:
Original: H E L L O
i j swap H and O
O E L L H
i j swap E and L
O L L E H
ij pointers meet — done
זה פועל בזמן O (n), ונעשה במקום על מערך שניתן לשינוי, O (1) שטח נוסף. ב-JavaScript מחרוזות אינן ניתנות לשינוי כך שאתה יכול 't ממש להחליף במקום, אבל ההיגיון של שתי נקודות הוא מה שהם ' בודקים שאתה מבין הגרסה הרקורסיבית - reverse(s) = last char + reverse(rest)- יפה יותר אבל משתמש במרחב O(n) call-stack, שהוא הפשרה שכדאי להזכיר בקול בראיון.
וזכור את המאפיין שהופך את הבדיקה לטריוויאלית: היפוך הוא היפוך משלו. הפוך מחרוזת פעמיים ואתה 'חזר למקום שבו התחלת. כאשר אני בודק יחידה כל קוד היפוך, זה 's טענה מספר אחת: reverse(reverse(x)) === x עבור אצווה של תשומות כולל - במיוחד - אימוג'י, כך שהבדיקה למעשה תופסת את באג הפונדקאית-זוג במקום להסתיר אותו.
שאלות נפוצות
האם הכלי היפוך מחרוזת תומך בהיפוך מילים או שורות?
מס 'יש לו מצב יחיד שהופך תווים.There's אין סדר מילים נפרד או מצב סדר שורה.אם אתה צריך להפוך את הסדר של מילים או שורות, לעשות את זה בקוד עם split(' ') או split('\n') ואחריו .reverse().join(...).
למה אימוג'ים יוצאים משובשים אחרי היפוך?
מכיוון שהכלי מתהפך על ידי יחידת קוד UTF-16, כמו JavaScript's split(''). רצפי אימוג'י ודגל מאוחסנים כזוגות פונדקאים - שתי יחידות קוד הגיוניות רק יחד - והיפוך מפצל אותם. טקסט רגיל ותווי CJK הם יחידות קוד בודדות, כך שהם הופכים בצורה נכונה.
האם הוא מטפל בטקסט Unicode ו-CJK?
חלקית.תווים מודגשים סיניים, יפניים, קוריאניים, קיריליים ומרכיבים מראש הופכים בצורה נכונה מכיוון שכל אחד מהם הוא יחידת קוד בודדת. Emoji, flag emoji וסימני שילוב מפורקים ישברו. לטיפול נכון לחלוטין בקוד שלך, השתמש Intl.Segmenter עם גרפמה גרנולריות.
האם הטקסט שלי נשלח לשרת?
מס 'היפוך קורה באופן מקומי בדפדפן שלך כפי שאתה מקליד - הטקסט לעולם לא מועלה זה עושה את זה בטוח עבור היפוך מחרוזות רגישות או פרטיות.
איך אני בודק אם מילה היא פלינדרום?
הפוך את זה עם ה חוט הפוך כלי והשווה למקור.If they're identical, it's a palindrome.עבור ביטויים, הסר רווחים, סימני פיסוק, והבדלי מקרה לפני השוואה - "A man a plan a canal Panama" is a palindrome only after normalizing.
האם זה יכול להתמודד עם טקסט ארוך מאוד?
כן. מכיוון שהוא פועל בדפדפן שלך, המגבלה המעשית היא זיכרון המכשיר 's שלך, המכסה בנוחות מיליוני תווים. זה הופך בשידור חי תוך כדי הקלדה, כך שמשחות גדולות במיוחד עשויות להרגיש מעט פחות מיידיות, אבל שם ' אין שרת הלוך ושוב.
מדוע היפוך מחרוזת היא שאלה נפוצה כל כך בראיון?
הוא אורז הרבה יסודות לבעיה אחת קטנה: מניפולציה של מערך ומיתרים, טכניקת שתי הנקודות, פשרות במקום לעומת העתקה, רקורסיה, ואם המראיין חד - מקרי קצה של Unicode. It' קל להתחיל ויש לו מספיק עומק כדי להפריד בין תשובה מהירה לתשובה יסודית.
כלים קשורים:



