對于一個給定的字符序列S,請把其回圈左移 K 位后的序列輸出,例如,字符序列 S= "abcXYZdef",要求輸出回圈左移 3 位后的結果,即 "XYZdefabc"
解題思路
最簡單的做法,拼接字串
public class Solution {
public String LeftRotateString(String str,int n) {
if(str == null || str.length() == 0) {
return "";
}
StringBuilder strb = new StringBuilder(str);
String leftStr = strb.substring(0, n % str.length());
strb.delete(0, n % str.length());
strb.append(leftStr);
return strb.toString();
}
}
另一種思路就是利用字串翻轉,假設字串 abcdef,n = 3,設 X = abc,Y = def,所以字串可以表示成 XY,如題干,問如何求得 YX,假設 X 的翻轉為 XT,XT = cba,同理 YT = fed,那么 YX = (XTYT)T,三次翻轉后可得結果
public class Solution {
public String LeftRotateString(String str,int n) {
if(str == null || str.length() == 0) {
return "";
}
if(n > str.length()) {
n %= str.length();
}
char[] chars = str.toCharArray();
reverse(chars, 0, n - 1);
reverse(chars, n, chars.length - 1);
reverse(chars, 0, chars.length - 1);
return new String(chars);
}
public void reverse(char[] chars, int start, int end) {
while(start < end) {
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/187639.html
標籤:其他
上一篇:1024程式員節來了!想成為程式員,應該怎么準備自己的簡歷呢?
下一篇:翻轉單詞順序列
