【劍指offer】之左旋轉字串
阿新 • • 發佈:2019-02-04
題目描述:組合語言中有一種移位指令叫做迴圈左移(ROL),現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於一個給定的字元序列S,請你把其迴圈左移K位後的序列輸出。例如,字元序列S=”abcXYZdef”,要求輸出迴圈左移3位後的結果,即“XYZdefabc”。是不是很簡單?OK,搞定它!
分析:
方法一,先求出左移一位的函式,然後就可以得出左移n位的函式。
java程式碼實現:
//左移n 位 private static String turnLeftWithNum(String str, int n) { for(int i=0;i<n;i++) { String temp = turnLetfonce(str); str = temp; } return str; } //左移一位 private static String turnLetfonce(String str) { char[] temp = new char[str.length()]; for(int i=0;i<str.length();i++) { temp[i] = str.charAt(i); } char c = temp[0]; int i=0; for(;i<str.length()-1;i++) { temp[i] = temp[i+1] ; } temp[i] = c; return new String(temp); }
方法二(offer上面的方法)
java程式碼實現:
//左移n位 private static String RoLString(String str,int n) { if(str == null || n < 1) return null; String temp = Reverse(str,0,n-1); temp = Reverse(temp,n,temp.length()-1); temp = Reverse(temp,0,temp.length()-1); return temp; } //翻轉一個單詞。 private static String Reverse(String str,int start,int end) { char[] temp = new char[str.length()]; for(int i=0;i<str.length();i++) { temp[i] = str.charAt(i); } while(start < end) { char c = temp[start]; temp[start] = temp[end]; temp[end] = c; start ++; end--; } return new String(temp); }