1. 程式人生 > >左旋轉字串(java版)

左旋轉字串(java版)

【題目描述】組合語言中有一種移位指令叫做迴圈左移(ROL),現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於一個給定的字元序列S,請你把其迴圈左移K位後的序列輸出。例如,字元序列S=”abcXYZdef”,要求輸出迴圈左移3位後的結果,即“XYZdefabc”。是不是很簡單?OK,搞定它!

【解題思路1】兩次翻手法
//1. 取迴圈左移的子串,翻轉。
//2. 取剩餘的子串,翻轉。
//3. 將兩個子串拼接起來,整體翻轉。

public class Solution {
    public String LeftRotateString(String str,int n) {
        if
(str==null || str.length()==0 || n==0){ return str; } int len = str.length(); StringBuffer sBuff1 = new StringBuffer(str.substring(0, n%len)); StringBuffer sBuff2 = new StringBuffer(str.substring(n%len, len)); StringBuffer sBuff3 = new StringBuffer(sBuff1.reverse
().toString() + sBuff2.reverse().toString()); return sBuff3.reverse().toString(); } }

【解題思路2】
//1. 將原字串複製一份,新增到原字串中。
//2. 令n=n%len,則n-n+len之間的子串即為所求。
//3.如: str=”abcXYZdef”,複製結束後,str = “abcXYZdefabcXYZdef”,
返回其從(n%len)到(n%len+len)的子串,即為迴圈左移的結果。

public class Solution {
    public String LeftRotateString(String str
,int n) { if(str==null || str.length()==0 || n==0){ return str; } int len = str.length(); n = n%len; str += str; return str.substr(n, n+len); } }