左旋轉字元(思路與實現)
阿新 • • 發佈:2019-02-01
組合語言中有一種移位指令叫做迴圈左移(ROL),現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於一個給定的字元序列S,請你把其迴圈左移K位後的序列輸出。例如,字元序列S=”abcXYZdef”,要求輸出迴圈左移3位後的結果,即“XYZdefabc”。是不是很簡單?OK,搞定它!
思路:
情況分為兩種:
情況一:首先當我這個左移的位數沒有超過這個字串的長度,這個時候只需要將這個字串的前面左移的拼接到後面去。
情況二:是這個左移的位數超過了這個字元創的長度,這個時候就需要計算,左移後前面真正需要左移多少位。比如一個數12,那麼此時左移7位,這個時候實際移動的是一位,所以需要計算,這裡的計算方法 左移位數n % 字元序列長度(求餘),那麼就知道真正左移的位數。
所以將上面這個和現在的這個綜合一下,那麼只需要求出正在左移的位置。就可以求出最後結果:
實現(一個是繁瑣的,一個是較簡便的):
public class Solution { /* 這是一種比較麻煩的辦法 String firstSub; String lastSub; StringBuffer buffer = new StringBuffer(); public String LeftRotateString(String str,int n) { if(str == null || str.length() == 0){ return ""; } if(n > str.length()){ int a = n % str.length(); firstSub = str.substring(0, a); lastSub = str.substring(a); buffer.append(lastSub+firstSub); }else{ firstSub = str.substring(0, n); lastSub = str.substring(n); buffer.append(lastSub+firstSub); } return buffer.toString(); } */ /* 這個是一種比較簡便的方法 */ public String LeftRotateString(String str,int n) { if(str.length() == 0 || str == null){ return ""; } int length = str.length(); int index = n % length; str += str; return str.substring(index, length + index); } }