LeetCode Notes: Reverse String
Question
Write a function that reverses a string. The input string is given as an array of characters s.
Example 1:
Input: s = ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]
Example 2:
Input: s = ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]
Constraints:
1 <= s.length <= 105s[i]is a printable ascii character.
Follow up: Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.
ACSII code printable characters
| Decimal | Symbol | Interpretation | Decimal | Symbol | Interpretation |
|---|---|---|---|---|---|
| 32 | space | 80 | P | Capital letter P | |
| 33 | ! | exclamation mark | 81 | Q | Capital letter Q |
| 34 | " | Double quotation marks | 82 | R | Capital letter R |
| 35 | # | Pound sign | 83 | S | Capital letter S |
| 36 | $ | Dollar sign | 84 | T | Capital letter T |
| 37 | % | Percent sign | 85 | U | Uppercase letter U |
| 38 | & | and | 86 | V | Capital letter V |
| 39 | ' | Single quotation mark | 87 | W | Capital letter W |
| 40 | ( | Left bracket | 88 | X | Capital letter X |
| 41 | ) | Close parenthesis | 89 | Y | Capital letter Y |
| 42 | * | Asterisk | 90 | Z | Capital letter Z |
| 43 | + | Plus Sign | 91 | [ | Left bracket |
| 44 | , | Comma | 92 | \ | Backslash |
| 45 | - | hyphen or minus sign | 93 | ] | right square bracket |
| 46 | . | period or decimal point | 94 | ^ | diacritics |
| 47 | / | slash | 95 | _ | Underscore |
| 48 | 0 | 0 | 96 | ` | Accents |
| 49 | 1 | 1 | 97 | a | lowercase a |
| 50 | 2 | 2 | 98 | b | lowercase letter b |
| 51 | 3 | 3 | 99 | c | lowercase letter c |
| 52 | 4 | 4 | 100 | d | lowercase letter d |
| 53 | 5 | 5 | 101 | e | lowercase letter e |
| 54 | 6 | 6 | 102 | f | Lowercase letter f |
| 55 | 7 | 7 | 103 | g | lowercase letter g |
| 56 | 8 | 8 | 104 | h | lowercase letter h |
| 57 | 9 | 9 | 105 | i | lowercase i |
| 58 | : | colon | 106 | j | lowercase letter j |
| 59 | ; | semicolon | 107 | k | lowercase letter k |
| 60 | < | Less than | 108 | l | lowercase letter l |
| 61 | = | equal sign | 109 | m | Lowercase letter m |
| 62 | > | greater than | 110 | n | lowercase letter n |
| 63 | ? | question mark | 111 | o | lowercase letter o |
| 64 | @ | electronics Mail symbol | 112 | p | lowercase letter p |
| 65 | A | Uppercase letter A | 113 | q | Lowercase letter q |
| 66 | B | Uppercase letter B | 114 | r | Lowercase letter r |
| 67 | C | Capital letter C | 115 | s | lowercase letter s |
| 68 | D | uppercase letter D | 116 | t | lowercase letter t |
| 69 | E | Capital letter E | 117 | u | Lowercase letter u |
| 70 | F | Capital letter F | 118 | v | Lowercase letter v |
| 71 | G | Uppercase letter G | 119 | w | lowercase letter w |
| 72 | H | uppercase letter H | 120 | x | lowercase letter x |
| 73 | I | Uppercase letter I | 121 | y | Lowercase letter y |
| 74 | J | Uppercase letter J | 122 | z | Lowercase letter z |
| 75 | K | Capital letter K | 123 | { | Left brace |
| 76 | L | Capital letter L | 124 | | | Vertical line |
| 77 | M | Capital letter M | 125 | } | right brace |
| 78 | N | Capital letter N | 126 | ~ | tilde |
| 79 | O | Capital letter O | 127 | Delete |
Solution
Analysis:
- First add an order mark for each character
- Sort the array in reverse order according to the order of the identification to achieve the reverse effect
- Extract the key character in the inverted array and reset the character
Note:
The requirement in the question is the printable characters in the ASCII code table. Based on this requirement, if the order mark is added in the first step, use ['0-a','1-b','2-c'] The way of dividing characters to sort is not rigorous enough.
Code:
/**
* @param {character[]} s
* @return {void} Do not return anything, modify s in-place instead.
*/
var reverseString = function(s) {
/**
* Add an order mark for each character
*
* ['a','b','c']
*
* =>
*
* [
* {index:0,str:'a'},
* {index:1,str:'b'},
* {index:2,str:'c'},
*]
*/
s.map((item,index)=>{
return {
index:index,
str:item
}
})
/**
* Reverse order
*
* [
* {index:0,str:'a'},
* {index:1,str:'b'},
* {index:2,str:'c'},
*]
*
* =>
*
* [
* {index:2,str:'c'},
* {index:1,str:'b'},
* {index:0,str:'a'},
*]
*/
.sort((a,b)=>{
return b.index-a.index
})
/**
* Restore
*
* [
* {index:2,str:'c'},
* {index:1,str:'b'},
* {index:0,str:'a'},
*]
*
* =>
*
* [ 'c', 'b', 'a']
*/
.forEach((item,index,arr)=>{
s[index] = item.str
})
};

Comments