--- title: '344. Reverse String' description: Write a function that reverses a string. The input string is given as an array of characters s icon: dot topics: - { name: "Two Pointers", slug: "two-pointers" } - { name: "String", slug: "string" } video: "_d0T_2Lk2qA" companies: - { name: "tcs", period: "Thirty Days", frequency: 58.2 } - { name: "Google", period: "Thirty Days", frequency: 50.2 } - { name: "Amazon", period: "Thirty Days", frequency: 39.1 } - { name: "Microsoft", period: "Three Months", frequency: 48.3 } - { name: "Bloomberg", period: "Three Months", frequency: 46.8 } - { name: "Meta", period: "Three Months", frequency: 34.5 } - { name: "Qualcomm", period: "Six Months", frequency: 80.7 } sidebar: label: 'Reverse String' badge: 'Easy' --- :::warning You must do this by modifying the input array in-place with O(1) extra memory. ::: ### 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 <= 10^5` - `s[i]` is a printable ascii character. ## Approach ```mermaid flowchart TD S(["reverseString(s)"]) --> I["i = 0, j = s.length - 1"] I --> W{"i < j?"} W -- no --> E(["done — s was reversed in place, nothing returned"]) W -- yes --> A["swap s[i] and s[j]"] A --> B["i++; j--"] B --> W ``` ## Solution ```js /** * @param {character[]} s * @return {void} Do not return anything, modify s in-place instead. */ var reverseString = function(s) { let i = 0; let j = s.length - 1; while (i < j) { [s[i], s[j]] = [s[j], s[i]]; j--; i++; } }; ```