【HC】左旋转字符串
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; ilen; i++) {
q.add(a); // 1. fedcba
}
for (int j = 0; jn; j++) {
q.add(q.poll()); // 2. cbafed
}
StringBuilder sb = new StringBuilder();
for (int k = 0; klen; k++) {
sb.append((char) q.poll()); // 3. defabc
}
return sb.toString();
}
http://cdn.u1.huluxia.com/g3/M01/36/E5/wKgBOV3H1EOAJWDsAAB7c6R6rKQ721.jpg
页:
[1]