|
1. 左旋转字符串
对于一个给定的字符序列 S,把其循环左移 N 位后的序列输出。例如字符序列 S=”abcdef”,输出循环左移3位后的结果,即“defabc”
2. 解法
字符串 S 为abcdef,n=3,设X=abc,Y=def,原字符串可以表示成XY。此时用 T表示翻转, X 的翻转为XT,即XT=cba,同理YT=fed,那么YX=(XTYT)T,三次翻转后可得结果
public String leftRotateString(String str, int n) {
if (null == str || str.length() == 0 || n == 0 || str.length() cbafed-> defabc
public String leftRotateString(String str, int n) {
if (null == str || str.length() == 0 || n == 0 || str.length() n) {
return str;
}
Queue q = new ArrayBlockingQueue(str.length());
char[] a = str.toCharArray();
int len = a.length;
for (int i = 0; i len; i++) {
q.add(a); // 1. fedcba
}
for (int j = 0; j n; j++) {
q.add(q.poll()); // 2. cbafed
}
StringBuilder sb = new StringBuilder();
for (int k = 0; k len; k++) {
sb.append((char) q.poll()); // 3. defabc
}
return sb.toString();
}
|
|