Lintcode: Rotate String
Given a string and an offset, rotate string by offset. (rotate from left to right) Example Given "abcdefg" for offset=0, return "abcdefg" for offset=1, return "gabcdef" for offset=2, return "fgabcde" for offset=3, return "efgabcd"
需要注意的是:if (A.length == 0) return new char[0]; 空数组
1 public class Solution { 2 /* 3 * param A: A string 4 * param offset: Rotate string with offset. 5 * return: Rotated string. 6 */ 7 public char[] rotateString(char[] A, int offset) { 8 // wirte your code here 9 if (A==null || A.length == 0) return new char[0]; 10 String str = new String(A); 11 offset %= str.length(); 12 if (offset == 0) return str.toCharArray(); 13 String first = str.substring(0, str.length()-offset); 14 String second = str.substring(str.length()-offset); 15 String res = second + first; 16 return res.toCharArray(); 17 } 18 };
法二(推荐):
1 public class Solution { 2 /** 3 * @param str: an array of char 4 * @param offset: an integer 5 * @return: nothing 6 */ 7 public void rotateString(char[] str, int offset) { 8 // write your code here 9 if (str==null || str.length==0) return; 10 offset %= str.length; 11 if (offset == 0) return; 12 reverse(str, 0, str.length-1); 13 reverse(str, 0, offset-1); 14 reverse(str, offset, str.length-1); 15 } 16 17 public void reverse(char[] str, int l, int r) { 18 19 while (l < r) { 20 char temp = str[l]; 21 str[l] = str[r]; 22 str[r] = temp; 23 l++; 24 r--; 25 } 26 } 27 }