The trick on this one is to use the extra memory word to hold a temporary value. Then you can swap the first and last values in the string, the second-to-first and second-to-last values, etc. One note of caution on this approach: if the string is very large, you may encounter paging problems which would affect efficiency.
There's also an elegant recursive algorithm for reversing a string, but it's not O(1). If you're interested, google "recursive string reverse".