左旋轉字串(java版)
阿新 • • 發佈:2019-02-12
【題目描述】組合語言中有一種移位指令叫做迴圈左移(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);
}
}