My answer:
class Solution { public String reverseString(String s) { if (s == null || s.length() <= 1) { return s; } // solution 1: use stack // LinkedList<Character> stack = new LinkedList<Character>(); // StringBuilder sb = new StringBuilder(); // for (int i = 0; i < s.length(); i++) { // stack.addLast(s.charAt(i)); // } // while(!stack.isEmpty()) { // sb.append(stack.pollLast()); // } // return sb.toString(); // solution 2: in-place, one time traverse -> swap char[] letters = s.toCharArray(); char temp = '0'; int distance = 0; do { temp = letters[distance]; letters[distance] = letters[s.length() - 1 - distance]; letters[s.length() - 1 - distance] = temp; distance ++; } while(2 * (distance + 1) <= s.length()); return String.valueOf(letters); } }
One interesting solution: Explanation is here: http://www.cnblogs.com/suoloveyou/archive/2012/04/25/2470292.html
Basically it is using XOR bitwise operation
public static String reverseString5(String s) { char[] ch = s.toCharArray(); int start = 0; int end = ch.length - 1; while (start < end) { ch[start] = (char) (ch[start] ^ ch[end]); ch[end] = (char) (ch[start] ^ ch[end]); ch[start] = (char) (ch[start] ^ ch[end]); start++; end--; } return new String(ch); }
Another one is using recursive way to always reverse 1st half and 2nd falf
No comments:
Post a Comment