     "metadata": {},
     "source": [
      "## Algorithm\n",
      "\n",
      "We'll want to keep two pointers\n",
      "* i is a pointer to the first char\n",
      "* j is a pointer to the last char\n",
      "\n",
      "To get a pointer to the last char, we need to loop through all characters, take note of null terminator.\n",
      "\n",
 
</s> remove     "## Pythonic Solution(s)"
 </s> add     "## Pythonic Code\n",
    "\n",
    "The following code is Pythonic, but requires using additional data structures as Python strings are immutable.  You could use a bytearray or a list instead of a string to simulate manipulating an array of characters." </s> remove     "## Problem: Implement the function void Reverse(char* str)"
 </s> add     "## Problem: Implement the function void Reverse(char* str)\n",
    "\n",
    "* [Clarifying Questions](#Clarifying-Questions)\n",
    "* [Test Cases](#Test-Cases)\n",
    "* [Algorithm](#Algorithm)\n",
    "* [Code](#Code)\n",
    "* [Pythonic-Code](#Pythonic-Code)" </s> remove     "* \"\" -> \"\"\n",
    "* \"foo bar\" -> \"rab oof\""
 </s> add     "* '' -> ''\n",
    "* 'foo bar' -> 'rab oof'" </s> remove     "* Time: O(n).\n",
    "* Space: In-place.\n",
 </s> add     "* Time: O(n)\n",
    "* Space: In-place\n", </s> remove     "    return \"\".join(reversed(string))"
 </s> add     "    return ''.join(reversed(string))"
    "We'll want to keep two pointers:\n",
     "metadata": {},
     "source": [
      "## Algorithm\n",
      "\n",
    "We'll want to keep two pointers:\n",
      "* i is a pointer to the first char\n",
      "* j is a pointer to the last char\n",
      "\n",
      "To get a pointer to the last char, we need to loop through all characters, take note of null terminator.\n",
      "\n",
keep keep keep keep replace keep keep keep keep keep
 Added notebook index.  Added note about using additional data structures for the Pythonic solution.  Minor cleanup. 
arrays-strings/reverse_string.ipynb