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 <= 105
s[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